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
相关产品推荐
相关产品推荐

