Как проверить метод оплаты в трюфеле? - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь протестировать способ оплаты смарт-контракта в рамках трюфеля:

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)). Почему?

1 Ответ

0 голосов
/ 29 августа 2018

В вашем тестовом контракте есть пара проблем. Во-первых, вы не инициализируете свой тестовый контракт для хранения какого-либо эфира. Следовательно, TestContract не имеет средств для отправки на Contract. Для этого вам необходимо установить переменную хранения initialBalance контракта (см. Тестирование транзакций эфира ).

Во-вторых, вы неправильно вызываете функцию 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");
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...