测试用例失败:await关键字无效引发TS(80007)警告
问题修复方案
你的测试代码核心问题是await的位置错误,导致它未生效并触发TypeScript警告。
问题根源
你把await包裹了整个expect(...)表达式,但expect()本身返回的是Chai的断言对象,不是Promise,所以await对它完全不起作用。而Chai的事件断言链式调用(.to.emit(...).withArgs(...))才会返回需要等待的Promise,你需要等待这个链式调用的结果。
修复后的代码
describe("Add Task", function() { it("Should emit AddTask Event", async () => { let task = { taskText: "New task", isDeleted: false, }; // 正确写法:await 整个expect链式调用的结果 await expect(taskContract.addTask(task.taskText, task.isDeleted)) .to.emit(taskContract, "AddTask") .withArgs(owner.address, total_tasks); }); });
额外说明
- 你之前把async箭头函数改成普通函数没用,是因为问题根本不在函数类型,而是
await的位置完全错了。 - 合约调用
taskContract.addTask(...)返回的是交易Promise,Chai的事件断言需要基于这个Promise监听事件,所以必须通过await等待整个断言逻辑执行完成。
内容的提问来源于stack exchange,提问作者1181_Rahul Guha
相关产品推荐
相关产品推荐

