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

Hardhat测试:revertedWithCustomError匹配自定义错误仍失败

问题解决:自定义错误断言失败但控制台显示正确抛出

你的测试失败的核心原因是在断言前错误使用了await。

当合约函数会触发回滚时,await emr.dissmissRegulator(regulator)会直接抛出VM异常,导致expect语句根本没机会执行断言逻辑——这就是为什么控制台明明显示抛出了EMR__RegulatorDoesNotExist,但测试却失败的原因。

修正后的测试代码

it("reverts with EMR__RegulatorDoesNotExist for non-existent regulator", async function () {
    expect(emr.dissmissRegulator(regulator))
        .to.be.revertedWithCustomError(emr, "EMR__RegulatorDoesNotExist");
});

额外需要确认的两个点

  • 测试发起者必须是合法监管者:合约第一个判断会检查msg.sender是否为已注册的监管者,如果当前测试账户没被添加到s_regulators,会先抛出EMR__OnlyRegulatorsCanAddOrRemoveRegulators,根本到不了第二个错误分支。
  • 传入的regulator地址确实未注册:要确保你测试用的regulator地址没有被添加进合约的s_regulators映射,否则第二个条件不会触发回滚。

内容的提问来源于stack exchange,提问作者Srdjan Sanadrovic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:44:54