TypeError: Невозможно прочитать свойство 'call' из undefined при тестировании договора солидности - PullRequest
0 голосов
/ 28 августа 2018

У меня такая проблема. Я строю dapp, используя Ethereum, следуя видео-уроку.

Это мой умный контракт.

pragma solidity ^0.4.0;

contract SimpleWallet {
    address owner;
    mapping(address => bool) isAllowedToSendsFundsMapping;

    event deposit(address _sender, uint amount);
    event  withdraw(address _sender, uint amount, address _benificiary);

    function SimpleWallet()public{
        owner= msg.sender;
    }

    function (){
        if(msg.sender == owner || isAllowedToSendsFundsMapping[msg.sender]== true){
            deposit(msg.sender, msg.value);
        }else{
            throw;
        }
    }

    function sendFunds(uint amount, address receiver) returns (uint){
        if(msg.sender == owner || isAllowedToSendsFundsMapping[msg.sender]){
            if(this.balance>= amount){
                if(!receiver.send(amount)){
                    throw;
                }
                withdraw(msg.sender, amount, receiver);
                return this.balance;
            }
        }
    }

    function allowAddressToSendMoney(address _address){
        if(msg.sender == owner){
            isAllowedToSendsFundsMapping[_address]=true;
        }
    }

    function disallowAddressToSendMoney(address _address){
        if(msg.sender == owner){
            isAllowedToSendsFundsMapping[_address]=false;
        }
    }

    function isAllowedToSend(address _address) constant returns (bool){
        return isAllowedToSendsFundsMapping[_address]|| msg.sender == owner;
    }

    function killWallet(){
        if(msg.sender == owner){
            selfdestruct(owner);
        }
    }


}

Здесь я предоставляю тестовый файл.

var SimpleWallet = artifacts.require('./SimpleWallet.sol')
contract('SimpleWallet', function (accounts) {
  it('the owner is allowed to send funds', function () {
    var myContract = SimpleWallet.deployed()
    return myContract.isAllowedToSend.call(accounts[0]).then(function (isAllowed) {
      assert.equals(isAllowed, true, 'the owner should have been allowed to send funds')
    })
  })
})

Но когда я запускаю тест трюфеля в консоли, это выдает мне такую ​​ошибку.

 TypeError: Cannot read property 'call' of undefined

Я перепроверил код с видео, но оба кода похожи. Он работает правильно в видео, но на моем компьютере, он не работает правильно. И я погуглил это, но я не смог найти подходящий ответ на мою проблему. Может ли кто-нибудь помочь мне решить эту проблему? Спасибо.

1 Ответ

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

Исправлен и упрощен ваш тестовый файл, вот вам:

const SIMPLE_WALLET = artifacts.require('SimpleWallet.sol');

contract('SimpleWallet', function (accounts) {

  let simpleWallet;

  beforeEach('setup contract for each test case', async () => {
    simpleWallet = await SIMPLE_WALLET.new({from: accounts[0]})
  })

  it('should let owner to send funds', async () => {
    const isAllowed = await simpleWallet.isAllowedToSend(accounts[0]);
    assert(isAllowed);
  })
})
...