Ethereum 如何测试由另一个部署的契约生成的契约?

Ethereum 如何测试由另一个部署的契约生成的契约?,ethereum,solidity,truffle,Ethereum,Solidity,Truffle,目前,我想测试一个名为B的契约,它是使用truffle从另一个契约Registry生成的。例如: 合同注册表 pragma solidity >=0.4.17; import "./B.sol"; contract Registry is Owned { function createContract( address userAddress) public returns( bool res

目前,我想测试一个名为
B
的契约,它是使用truffle从另一个契约
Registry
生成的。例如:

合同<代码>注册表

pragma solidity >=0.4.17;
import "./B.sol";
contract Registry is Owned {

    function createContract(
        address userAddress) 
        public
        returns(
            bool res
        )
    {
        // create a contract B which the owner is the user.
        B b = new B(userAddress);

        return true;
    }
合同
B

pragma solidity >=0.4.17;
contract B {
    address private owner;

    constructor (
        address _owner
    ) 
        public
    {
        owner = _owner;
    }

    function logData(
        bytes32 data,
        uint    timestamp
    )
        public
        returns(bool res)
    {
        ...
    }

    ...
在块菌/测试中测试脚本
B.js

const Registry = artifacts.require('./Registry.sol');
const B = artifacts.require('./B.sol');

const truffleAssert = require('truffle-assertions');
const assert = require('assert');

contract('Registry', (accounts) => {
  let registry;
  let B;

  beforeEach(async () => {
      // create a reportSummary contract from registry contract. 
      registry = await Registry.deployed();

      // How can I retrieve the contract B's instance?
  });


因为我是SOLITY方面的新手,因此我无法找到任何方法来测试函数
logData
或contract
B
中的其他函数,这些函数依赖于contract
注册表。是否有合适的方式或我应该更改合同设计?谢谢。

您可以查看我的答案,它还有关于从导入的合同访问函数的示例


要通过web3访问该函数,只需使用Registry contract的实例,您可以调用contract B的函数

您可以检查我的回答,它也有从导入的contract访问函数的示例


要通过web3访问该功能,只需使用Registry contract的实例,您可以调用contract B的功能

谢谢您的回答,但我仍然无法访问新的和特定的contract B(每个contract B属于一个用户)。一旦注册合同生成了更多的合同B,我怎么知道要测试哪个合同B?似乎我只部署了带有用户地址的合同B就足以测试而不考虑注册合同。。。谢谢。谢谢回答,但我仍然无法访问新的特定合同B(每个合同B属于一个用户)。一旦注册合同生成了更多的合同B,我怎么知道要测试哪个合同B?似乎我只部署了带有用户地址的合同B就足以测试而不考虑注册合同。。。谢谢