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

Node.js测试智能合约转账失败:预期回滚却触发VM异常

问题分析与修复方案
  • 错误根源:你在expect断言里用await直接执行了transfer交易。当交易因余额不足触发revert时,await会立即抛出异常,导致测试框架直接报错,而没有让revertedWith断言去验证这个预期的revert行为。

  • 正确测试代码:移除expect内部的await,直接将transfer调用(返回的Promise对象)传给expect,这样Chai就能正确捕获并验证revert的原因:

it('Transfer tokens from owner should fail if owner has a low balance.', async () => {
    expect(ptrTokenContract.transfer(receiverAddress1.address, 10000000))
        .to.be.revertedWith('Insufficient balance.Transfer failed !');
    console.log(await ptrTokenContract.balanceOf(receiverAddress1.address));                
})
  • 另一种兼容写法:如果你的测试框架要求显式处理异步,也可以用await expect(...)的形式(注意expect内部依然不要加await):
it('Transfer tokens from owner should fail if owner has a low balance.', async () => {
    await expect(ptrTokenContract.transfer(receiverAddress1.address, 10000000))
        .to.be.revertedWith('Insufficient balance.Transfer failed !');
    console.log(await ptrTokenContract.balanceOf(receiverAddress1.address));                
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:05:26