我有两个合同,我在一个文件中写入,名为Sum.sol。和合约调用添加合同。我只想测试交叉契约调用。如果我没有将这两个合同放在一个文件中,使用松露编译Sum就会失败。但是当我进行测试时,结果非常奇怪。我不知道这是怎么发生的。
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;
}
}
然后我在松露
中为它写了一个测试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");
});
});
});
然后使用松露进行测试,结果是:
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 :(得分:0)
我不确定为什么你的测试3个月前没有工作,因为testrpc和松露从那时起经历了很多变化。在当前状态下,您的测试将失败,因为Sum.deployed()
将返回一个promise(您无法直接调用函数)。
我通过以下代码传递了您的测试:
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");
});
});
});
})