You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 17:13:14