【问题标题】:How to create new instance of contract for whole test suite truffle如何为整个测试套件松露创建新的合同实例
【发布时间】:2017-11-29 13:03:57
【问题描述】:

我正在使用 Solidity 和 Truffle 在以太坊网络上设置 ERC20 代币 ICO。

谁能告诉我为什么这不起作用,我有 4 个测试文件(因为我希望它们尽可能简短和简洁),一个用于测试令牌,一个用于测试设置众筹,一种用于测试成功运行(达到上限),另一种用于测试紧急停止功能。

出于这个原因,我想运行多个 it() 测试用例,它们使用前面的值来测试每个文件中自己的东西,即

在设置测试文件中:

首先 it() 测试是否部署了合约

Second it() 测试合约变量是否设置正确等。

然后我尝试在每个文件上创建令牌和合约的新实例,以便我可以运行各种测试用例。

每个文件都以:

开头
  Token.new(initialAmount, tokenName, decimalUnits,tokenSymbol, {from: account_one});
  Sale.new(softCap, hardCap, etherCostOfEachToken, account_one, token, durationInMinutes, {from: account_one});

但是,在运行我的测试时,我得到了错误:

AssertionError: State of contract was not 'Waiting approval': expected '4' to equal 1
at /Users/jackpickering/Desktop/Development/Capped_ICO/test/4Crowdsale_EmergencyStop_Test.js:28:14
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:228:7)

在完成成功的众筹测试文件运行后,状态尚未重置回 1,因此 Sale.new() 行不能工作。

有没有更好的方法来做到这一点?我错过了什么吗?

提前致谢。

【问题讨论】:

    标签: javascript unit-testing solidity truffle consensys-truffle


    【解决方案1】:

    我收到此错误的原因是因为我没有等到合约部署到网络,而是我将这些更改为在异步函数中执行并使用“等待”函数等到合约部署完成在进行其余测试之前已部署。

    我的工作代码如下:

    it("should create new token", async function() {
      token = await Token.new(initialAmount, tokenName, decimalUnits,tokenSymbol)
      supply = await token.totalSupply();
      assert.equal(supply, 10000000, "New crowdsale was not created");
    });
    
    it("should create new crowdsale", async function() {
      sale = await Sale.new(softCap, hardCap, etherCostOfEachToken, account_one, Token(token), durationInMinutes);
      state = await sale.getState();
      assert.equal(state, 1, "New crowdsale was not created");
    });
    

    【讨论】:

      猜你喜欢
      • 2018-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      相关资源
      最近更新 更多