首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为调用另一份合同的合同编写硬件测试

为调用另一份合同的合同编写硬件测试
EN

Ethereum用户
提问于 2021-08-15 19:19:18
回答 1查看 3.5K关注 0票数 1

基本上,我需要在我的合同中使用戴铭天。我想测试它,所以我复制了DAI智能合同代码,并将其部署在本地主机上。一切都很好,但我不能为代码编写硬质测试,因为它不知道部署在本地主机上的契约。在我的合同中使用另一个合同时,我应该如何编写测试?

代码语言:javascript
复制
    address daiContractAddress = 0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0; // HOW TO GET THIS TO HARDHAT TESTS?

    function getDaiBalanceForOwner() external view returns(uint){
        IERC20 dai = IERC20(address(daiContractAddress ));
        return dai.balanceOf(msg.sender); //Error: Transaction reverted: function call to a non-contract account
    }
EN

回答 1

Ethereum用户

回答已采纳

发布于 2021-08-16 09:55:49

在@LauriPeltonen的帮助下,最后的解决方案是:我只是在beforeEach中部署我的dai合同,然后取其地址并将其传递给合同constructor

稳健性:

代码语言:javascript
复制
address public daiContractAddress; 

constructor(address _daiContractAddress ) {
    daiContractAddress = _daiContractAddress;
}


function getDaiBalanceForOwner() external view returns(uint){
    IERC20 dai = IERC20(address(daiContractAddress));
    return dai.balanceOf(msg.sender);
}

EthersJS测试:

代码语言:javascript
复制
beforeEach(async function () {
    dai = await ethers.getContractFactory("Dai"); 
    myContract= await ethers.getContractFactory("MyContract"); 
     
    dai = await dai.deploy(1); //deploying dai contract first
    
    myContract = await myContract.deploy(dai.address); //deploying my contract later using dai.address in constructor
  });

  describe("Deployment", function() {
    it("Should be able to implement usd dai stablecoin", async function() {
      expect(ethers.utils.formatEther(await myContract.getDaiBalanceForOwner())).to.equal("0.0");
    });
  });
票数 3
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/107177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档