Как исправить ошибку превышения времени ожидания для асинхронных тестов и хуков, убедитесь, что вызывается «done ()»; если возвращаете обещание, убедитесь, что оно разрешается - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь развернуть простой контракт, используя mocha и ganache, но я получил эту ошибку: Acontract 1) "перед каждым" хуком для "Развертывание контракта"

0 passing (30s)
1 failing

1) "before each" hook for "Deploys a Contract":
Error: Timeout of 30000ms exceeded. For async tests and hooks, ensure 
"done()" is called; if returning a Promise, ensure it resolves.

Код контракта:

pragma solidity ^0.4.17;

contract Acontract {

string public message; // new variable

function Acontract(string initialMessage) public {
    message = initialMessage;
}

function setMessage(string newMessage) public {
    message = newMessage;
}


}

Код тестового файла:

const assert = require('assert');
const ganache = require('ganache-cli');
const Web3 = require('web3'); 
const web3 = new Web3(ganache.provider());
const { interface, bytecode} = require('../compile');

let accounts;
let result;

beforeEach( async () => {
 accounts = await web3.eth.getAccounts();

result = await new web3.eth.Contract(JSON.parse(interface))
.deploy ({ data: bytecode, arguments: ['WOW'] })
.send({  from: accounts[0], gas: '1000000'});
});

describe('Acontract', ()=> {

  it('Deploys a Contract', async  ()=>{

console.log(result)

    });
});

Как решить эту ошибку, код прост, я проверял получение учетных записей, и все было в порядке, также развертывание кажется нормальным, когда он приходитна отправку кода не работает!какие-либо предложения?

1 Ответ

1 голос
/ 25 апреля 2019

Я столкнулся с подобной проблемой и исправил ее следующим образом: ( Сначала вы можете попробовать номер 2 ).

  1. Установлен web3@1.0.0-beta.37 ( Примечание: ваши зависимости могут сильно отличаться от моих, так как вы используете твердость ^ 0.4.17 )

enter image description here

Добавлено поставщик ganache в коде.
const assert = require('assert');
const ganache = require('ganache-cli');
const Web3 = require('web3');
//Ganache Provider
const provider = ganache.provider();
const web3 = new Web3(provider);
const { interface, bytecode} = require('../compile');

let accounts;
let result;

beforeEach( async () => {
    accounts = await web3.eth.getAccounts();

    result = await new web3.eth.Contract(JSON.parse(interface))
        .deploy ({ data: bytecode, arguments: ['WOW'] })
        .send({  from: accounts[0], gas: '1000000'});

    //Set provider
    result.setProvider(provider);
});

describe('Acontract', ()=> {

    it('Deploys a Contract', async  ()=>{

        console.log(result)

    });
});
В этой версии немного изменена структура объекта "Контракт".Поэтому мне пришлось немного обновить экспорт файла compile.js ( Вам может не понадобиться эта версия компилятора Solidity ).

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...