我正在尝试在truffle框架中测试智能合约的payable方法:
contract Contract {
mapping (address => uint) public balances;
function myBalance() public view returns(uint) {
return balances[msg.sender];
}
function deposit() external payable {
balances[msg.sender] += msg.value;
}
}
contract TestContract {
function testDeposit() external payable {
Contract c = new Contract();
c.deposit.value(1);
Assert.equal(c.myBalance(), 1, "#myBalance() should returns 1");
}
}在我运行truffle test之后,它失败并返回了TestEvent(result: <indexed>, message: #myBalance() should returns 1 (Tested: 0, Against: 1))错误。为什么?
发布于 2018-08-29 09:02:42
您的测试合同有几个问题。第一个问题是你没有初始化你的测试契约来持有任何以太。因此,TestContract持有的资金不会发送给Contract。为此,您需要设置一个initialBalance合约存储变量(请参阅Testing ether transactions)。
其次,您没有正确调用deposit函数。要调用函数并发送,格式为contract.functionName.value(valueInWei)(<parameter list>)。
以下是TestContract的修复版本
contract TestContract {
uint public initialBalance = 1 wei;
function testDeposit() external payable {
Contract c = new Contract();
c.deposit.value(1)();
Assert.equal(c.myBalance(), 1, "#myBalance() should returns 1");
}
}https://stackoverflow.com/questions/52065303
复制相似问题