Как протестировать простой платежный контракт

Я пытаюсь протестировать простой платежный контракт в соответствии с учебным пособием по трюфелям, но не могу заставить его работать. Буду признателен за ваше руководство о том, как получить остатки на счетах (это, кажется, неработающий шаг)?

Pay.sol

pragma solidity ^0.4.17;

/// @title Pay - Facilitates payments.
contract Pay {
    event Payment(
        address _from,
        address _to,
        uint amount
    );

    /// @dev Makes a payment.
    /// @param _to Address to pay to.
    function pay(address _to) public payable {
        require(msg.value > 0);
        // Does this transfer the right amount of ether (msg.value measured in wei)?
        _to.transfer(msg.value);
        Payment(msg.sender, _to, msg.value);
    }
}

2_pay_migration.js

var Pay = artifacts.require("Pay");

module.exports = function(deployer) {
    deployer.deploy(Pay);
}

pay.js

var Pay = artifacts.require("./Pay.sol");

contract('Pay', function(accounts) {
    it("should put 10000 wei in the first account", function() {
        return Pay.deployed().then(function(instance) {
            pay = instance;
            //console.log(pay.estimateGas());
            return pay.getBalance.call(accounts[0]);
        }).then(function(balance){
            startingBalance = balance;
            return pay.pay(accounts[1], 2500, {from: accounts[0]});
        }).then(function() {
            return pay.getBalance.call(accounts[0]);
        }).then(function(balance) {
            assert.equal(startingBalance, balance);
        })
    });
});

При запуске трюфельного теста код прерывается следующей ошибкой:

  1) Contract: Pay should put 10000 wei in the first account:
     TypeError: Cannot read property 'call' of undefined
      at test/pay.js:8:35
      at <anonymous>
      at process._tickCallback (internal/process/next_tick.js:118:7)

Ответы (1)

getBalanceэто не функция, содержащаяся в вашем контракте, а функция web3. Чтобы получить баланс, вы можете использовать, web3.eth.getBalance(contractAddress)где contractAddress в вашем случае pay.address. web3 уже доступен в тестовых файлах трюфеля, поэтому вам не нужно его включать.

https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethgetbalance