我正在尝试为我拥有的智能合约编写测试。为了简单起见,这是智能合约的外观:
**注意:**我对值进行了硬编码,以100%确定离开合约的值。
function withdraw(uint256 tokenId, address to, address owner) external returns (uint256 amount) {
amount = _positionManager.withdraw(tokenId, owner);
_wrapper.withdraw(amount);
//(bool success, ) = to.call{value: amount }("");
(bool success, ) = to.call{value: 100000000000000000 }("");
// failed transfer...
require(success, "3FM:FT");
emit Withdraw(to, amount);
}
我有一个测试,看起来像这样:
const provider = ethers.getDefaultProvider();
const oldBalance = await provider.getBalance(owner.address);
console.log('Old Balance:' + oldBalance);
await fundManager.withdraw(defaultTokenId, owner.address, owner.address);
const newBalance = await provider.getBalance(owner.address);
const expectedAmount = oldBalance.add(BigNumber.from("100000000000000000"));
console.log('New Balance:' + newBalance);
expect(newBalance).to.equal(expectedAmount);
当我看控制台时,它说新的余额和旧的余额一样。但是我的智能合约没有抛出。
我有一种感觉,这与安全帽的工作方式有关,它只是忽略了值。我如何验证余额是否正确发送?
**编辑:**其他信息
1.我已经验证了我的安全帽配置不会默默失败,通过替换成功变量与一个显式的假
1.以下是运行测试返回的日志:
旧余额:276014338387200新余额:276014338387200
1.我有一种感觉,这一定是一个安全帽的问题,因为无论我在我的初始存款从同一个帐户,我总是返回相同的余额。
1条答案
按热度按时间oxf4rvwz1#
问题出在这行代码上:
默认提供程序不一定是您用于测试的提供程序,而是您需要在ethers上访问提供程序,如下所示: