首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在松露中测试payable方法?

如何在松露中测试payable方法?
EN

Stack Overflow用户
提问于 2018-08-29 03:53:27
回答 1查看 1.7K关注 0票数 3

我正在尝试在truffle框架中测试智能合约的payable方法:

代码语言:javascript
复制
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))错误。为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-29 09:02:42

您的测试合同有几个问题。第一个问题是你没有初始化你的测试契约来持有任何以太。因此,TestContract持有的资金不会发送给Contract。为此,您需要设置一个initialBalance合约存储变量(请参阅Testing ether transactions)。

其次,您没有正确调用deposit函数。要调用函数并发送,格式为contract.functionName.value(valueInWei)(<parameter list>)

以下是TestContract的修复版本

代码语言:javascript
复制
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");
  }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52065303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档