Я пытаюсь разработать приложение с Truffle и хочу проверить мой умный контракт.Контракт содержит в себе второй контракт, например:
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();
}
}
Затем я хочу протестировать этот контракт в Javascript следующим образом:
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()
в тесте, он скажет мне, что функции contract()
нет, даже если другие поля доступны через методы получения.Чего мне не хватает здесь, чтобы получить доступ к экземпляру SubContract?