2017-11-29 11 views
0

Solidity와 Truffle을 사용하여 ethereum 네트워크에서 ERC20 토큰 ICO를 설정 중입니다.전체 테스트 스위트 트뤼플에 대한 계약의 새 인스턴스를 만드는 방법

누구도 이것이 작동하지 않는 이유를 말해 줄 수 있습니까? 4 가지 테스트 파일이 있습니다. 가능한 한 짧고 간결하게 유지해야합니다. 하나는 토큰 테스트 용이고 하나는 셋업 테스트 용입니다. 크라우드 데일 (crowdsale), 성공적인 실행을 테스트하기위한 것 (모자가 도달 한 곳) 및 비상 정지 기능을 테스트하기위한 것.

:

이러한 이유로

, 나는 셋업 테스트 파일에서

즉 각 파일에 자신의 일을 테스트하기 위해 위의 값을 사용하여 여러 IT() 테스트 케이스를 통해 실행하고 싶습니다 첫째() 시험은 계약이 배포 된 경우

두 번째 그것() 시험 계약 변수가 올바르게 설정되어 있는지 등 그때 각 파일에 토큰 및 계약의 새 인스턴스를 만들려면 시도

그래서 나는 목구멍을 달릴 수있다. 다양한 테스트 케이스. 상태는 성공적인 crowdsale 테스트를 마친 후 다시 1로 초기화되지 않은

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) 

: 내 테스트를 실행할 때

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

그러나, 다음과 같은 에러가 발생합니다

각 파일로 시작 파일이 실행되었으므로 Sale.new() 행이 작동하지 않아야합니다.

더 좋은 방법이 있나요? 내가 놓친 게 있니?

미리 감사드립니다.

답변

0

이 오류가 발생하는 이유는 계약이 네트워크에 배포 될 때까지 기다리지 않아서 대신 비동기 함수 내에서 수행되도록 변경 한 다음 'await'함수를 사용하여 계약이 끝날 때까지 기다리는 것입니다 나머지 테스트와 함께 수행하기 전에 배치되었습니다. 다음과 같이

내 작업 코드는 다음과 같습니다

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"); 
});