我正在尝试使用Truffle开发dApp,并想测试我的智能合约。合同中包含第二个合同,如下所示:
pragma solidity >=0.4.21 <0.6.0;
contract SubContract {
uint public foo;
constructor() public {
foo = 0;
}
}
contract MainContract {
SubContract public contract;
constructor() public {
contract = new SubContract();
}
}
然后我要像这样测试Java中的合同:
var MainContract = artifacts.require("./MainContract.sol");
contract("MainContract", function(accounts) {
it("initializes SubContract contract", function() {
return MainContract.deployed().then(function(instance) {
return instance.contract;
}).then(function(subContractInstance) {
return subContractInstance.foo();
}).then(function(foo) {
assert.equal(foo.toNumber(), 0);
});
});
});
如果我随后尝试按原样运行此测试,则表明无法访问foo()
的成员函数undefined
。如果在测试中将其从instance.contract
更改为instance.contract()
,即使没有其他字段通过getter方法访问,它也会告诉我没有函数contract()
。我在这里缺少什么才能访问SubContract实例?