Ownable合约onlyOwner修饰符测试失败:revertedWith未捕获回滚信息
问题排查与解决方案
问题根源
测试用例中错误地使用await直接执行会回滚的交易,导致交易回滚时抛出的错误没有被Chai的revertedWith断言捕获,而是直接触发了测试框架的错误。
Chai的revertedWith断言需要直接接收未执行的交易Promise,而非提前用await执行它——一旦用await执行,回滚错误会直接抛出,无法被断言逻辑处理。
解决方案
修改测试用例,移除withdraw()调用前的await,直接将交易调用传入expect:
it("Should not be withdrawed by notowner", async function () { const { myToken, addr1 } = await loadFixture(deployTokenFixture); expect(myToken.connect(addr1).withdraw()).to.be.revertedWith( "Ownable: caller is not the owner" ); });
补充说明
- 当需要断言交易回滚时,Chai的断言方法会自动处理异步逻辑,无需手动添加
await; - 如果需要同时断言交易成功执行,才需要用
await执行交易后再做断言。
内容的提问来源于stack exchange,提问作者Happy
相关产品推荐
相关产品推荐

