2017-10-14 19 views
0

truffle consoleで動作していますが、truffle testで失敗します。Solidity(Truffle):トリプルコンソールでうまく動作しますが、トリュフテストでは失敗します

contract Geekt { 
    address[] usersByAddress; 

    function registerNewUser(string handle, bytes32 city, bytes32 state, bytes32 country) public returns (bool success) { 
    address newUserAddress = msg.sender; 

    usersByAddress.push(newUserAddress); 

    return true; 
    } 

    function getUsers() public constant returns (address[]) { 
    return usersByAddress; 
    } 
} 

やテストは以下のとおりです:

コードがある

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

contract('Geekt', function (accounts) { 
    it('should get initial users as empty array', function() { 
    return Geekt.deployed().then(function (instance) { 
     return instance.getUsers.call(); 
    }).then(function (res) { 
     assert.equal(res.length, 0, "Expected empty array after init."); 
    }); 
    }); 

    it('should successfully add user', function() { 
    var geekt; 

    return Geekt.deployed().then(function (instance) { 
     geekt = instance; 

     return geekt.registerNewUser.call("elie222", "London", "State", "UK"); 
    }).then(function (res) { 
     assert.equal(res, true, "Expected registerNewUser to return true."); 
    }).then(function (res) { 
     return geekt.getUsers.call(); 
    }).then(function (res) { 
     // for debugging, but this assert passes: assert.equal(res.length, 0, "Expected array of size 0 after registerNewUser."); 
     // res == [] so the next line fails: 
     assert.equal(res.length, 1, "Expected array of size 1 after registerNewUser."); 
    }); 
    }); 
}); 

それはトリュフコンソールで素晴らしい作品:

truffle(development)> Geekt.then(function(instance){return instance.registerNewUser("Tectract","Denver","CO","USA");}) 
{ tx: '0x8eeea303ff9f5ceee56d71fd1265da61991749aa3d5e82db0d2d630a98fd6eb5', 
    receipt: 
    { transactionHash: '0x8eeea303ff9f5ceee56d71fd1265da61991749aa3d5e82db0d2d630a98fd6eb5', 
    transactionIndex: 0, 
    blockHash: '0xf9a0da5ec0aba80a3338781f6d6414ceb43ec0fc023c31649a1cc347a4aba2ea', 
    blockNumber: 14, 
    gasUsed: 24566, 
    cumulativeGasUsed: 24566, 
    contractAddress: null, 
    logs: [] }, 
    logs: [] } 
truffle(development)> Geekt.then(function(instance){return instance.getUsers();}) 
[ '0x1a004a36a6bc9bcde42c6d2b237c6477cf0f535f' ] 

どのようにこれが起こるだろうか?私は間違って何をしていますか?

答えて

0

問題は私がtransactionの代わりにcallを行っていたことでした。

トランザクションは状態を変更しますが、メソッド呼び出しは変更されず、ネットワークからのみ読み取られます。

詳細については、こちらをご覧ください。 https://truffle.readthedocs.io/en/beta/getting_started/contracts/

関連する問題