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

Hardhat中合约调用失败后如何继续执行剩余测试代码?

在Hardhat中处理合约调用失败的测试场景

当合约调用故意失败时,未处理的Promise拒绝会直接终止测试块,导致后续代码无法执行。解决这个问题有两种常用方法:

方法一:用try/catch捕获错误

把会失败的合约调用包裹在try/catch块里,捕获错误后就能继续执行后续代码,还能在catch里验证错误细节:

// some code 1
try {
  await contract.function()
} catch (error) {
  // 可选:验证错误信息是否符合预期
  if (!error.message.includes("预期的错误关键字")) {
    throw new Error("合约调用失败的错误不符合预期")
  }
}
// some code 2 现在会正常执行

方法二:用Hardhat集成的expect.reverts断言

这是Hardhat测试里更规范的写法,专门用来验证合约调用失败的场景,执行后不会终止测试:

// some code 1
// 预期调用会失败,可指定预期的错误消息(可选)
await expect(contract.function()).to.be.revertedWith("自定义错误信息")
// some code 2 会正常执行

两种方法的选择:

  • 如果需要在捕获错误后做额外的自定义逻辑(比如处理错误数据),用try/catch更灵活;
  • 如果只是验证合约调用是否按预期失败,expect.reverts写法更简洁,符合测试框架的最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:10:28