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

