Как выполнить шаги в трюфельном тесте?

Я пытаюсь проверить контракт, который полагается на конкретное состояние другого развернутого контракта.

Например, скажем, у меня есть контракт, требующий проверить функцию «передачи» договора ERC20.

Я должен убедиться, что:

  1. Развертывается erc20
  2. Контракт хочет протестировать с использованием экземпляра ERC20
  3. Возможно, чеканка некоторого фонда в msg.sender
  4. Чтобы msg.sender использовал метод approved () для развернутого контракта ERC20 для использования функции transferFrom ().

Мне сложно настроить это.

В документах сказано:

  

Перед выполнением каждой функции contract () ваши контракты перераспределяются   к запущенному клиенту Ethereum, чтобы тесты внутри него работали с чистым   состояние контракта.

В примере metacoin кажется, что они цепляют все:

  return MetaCoin.deployed().then(function(instance) {
    meta = instance;
    return meta.getBalance.call(accounts[0]);
  }).then(function(outCoinBalance) {
    metaCoinBalance = outCoinBalance.toNumber();
    return meta.getBalanceInEth.call(accounts[0]);
  }).then(function(outCoinBalanceEth) {
    metaCoinEthBalance = outCoinBalanceEth.toNumber();
  }).then(function() {
    assert.equal(metaCoinEthBalance, 2 * metaCoinBalance, "Library function returned unexpected function, linkage may be broken");
  });

Это направление должно быть принято?

У меня есть псевдозапись, но мне очень нравится писать.

it("Custom contract should be able to transfer for user", function() {
  var erc;
  var custom;
    return ERC20.deployed().then(function(instance) {
      erc = instance;
      instance.MintCoin()
      return erc;
    }).then(function(erc) {
      custom = CustomContract.deploy(erc.address);
      return custom;
    }).then(function(custom) {
      erc.allow(custom.address)
    }).then(function() {
      assert.equal(custom.WrappingTransferMethod(),true, "You are not authorized to transfer Fund");
    });
});

Как это сделать правильно? Должно ли это быть сделано прямо в солидности с утверждением трюфелей? Я впервые тестировал контракт с другими развернутыми контрактами, и я потерялся.

5 голосов | спросил trutest 3 PM00000080000005931 2017, 20:48:59

1 ответ


0

С ES8 вы можете использовать async /wait. Это значительно улучшает читаемость! Самое замечательное в том, что оно совместимо с обещаниями.

Ваш псевдо-код будет выглядеть примерно так:

it("Custom contract should be able to transfer for user", async function() {
  var erc;
  var custom;

  var instance = await ERC20.deployed();
  var custom = await CustomContract.deploy(erc.address);
  ...
});
ответил ivicaa 7 MarpmWed, 07 Mar 2018 23:20:37 +03002018-03-07T23:20:37+03:0011 2018, 23:20:37

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132