2016-12-21 1 views
1

J'ai deux contrats, j'écris dans un fichier, nommé Sum.sol. Le contrat de somme invoque Ajouter un contrat. Je veux juste tester l'appel inter-contrat. Si je n'ai pas mis les deux contrats dans un fichier, la compilation de Somme en utilisant la truffe échouerait. Mais quand je fais le test, le résultat est tellement bizarre. Je ne sais pas comment c'est arrivé.Comment tester un contrat intelligent avec appel croisé à l'aide de la truffe?

pragma solidity ^0.4.6; 
contract Add{ 
    function sum(uint x, uint y) returns(uint){ 
    return x+y; 
    } 
} 
contract Sum{ 
    function func(uint x, uint y) returns(uint){ 
    Add add = new Add(); 
    uint re = add.sum(x,y); 
    return re; 
    } 
} 

alors j'écrire un test pour elle dans la truffe

contract('Sum', function(accounts) { 
    it("should return 5 when add 2 and 3", function() { 
    var sum = Sum.deployed(); 

    return sum.func.call(2,3).then(function(res){ 
     assert.equal(res.valueOf(), 5, "add result is 5"); 

    }); 
    }); 
}); 

et le tester en utilisant la truffe, puis, les résultats sont:

Compiling Sum.sol... 


    Contract: Sum 
    1) should return 5 when add 2 and 3 
    > No events were emitted 


    0 passing (455ms) 
    1 failing 

    1) Contract: Sum should return 5 when add 2 and 3: 
    AssertionError: add result is 5: expected '9.1735649321334958107552852973512799782292704141468709142420585807991067901952e+76' to equal 5 
     at /Users/maiffany/testcoverage/test/add.js:6:14 
     at process._tickDomainCallback   (internal/process/next_tick.js:129:7) 
+0

ceci est une erreur de test rpc – hxmmm

Répondre

0

Je ne sais pas pourquoi votre test ne fonctionnait pas il y a 3 mois parce que les deux testrpc et la truffe ont beaucoup changé depuis. Dans son état actuel, votre test échouera car Sum.deployed() va renvoyer une promesse (que vous ne pouvez pas appeler des fonctions directement).

Je suis votre test passe avec le code suivant:

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

contract('Sum', function(accounts) { 
    it("should return 5 when add 2 and 3", function() { 
    Sum.deployed().then(function(instance){ 
     instance.func.call(2,3).then(function(res){ 
     assert.equal(res.valueOf(), 5, "add result is 5"); 
     }); 
    }); 
    }); 
})