首页 > 解决方案 > 如何测试由另一个已部署合约生成的合约?

问题描述

目前,我想测试一个名为的合同,该合同是使用松露B从另一个合同生成的。Registry例如:

合同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?
  });

因为我是一个新手,所以我找不到任何方法来测试依赖于合约的合约中的功能logData或其他功能。有什么合适的方法或者我应该改变设计的合同吗?谢谢。BRegistry

标签: ethereumsoliditytruffle

解决方案


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

Solidity:父合约可以查看子合约的数据更新吗?

通过web3访问该函数,只需使用Registry合约的实例即可调用Contract B的函数


推荐阅读