如何修复异步测试和挂钩的超时错误,确保调用 "done()";如果返回一个 Promise,确保它 resolve

How to fix Timeout exceeded error for async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves

我正在尝试使用 mocha 和 ganache 部署一个简单的合约,但我收到了这个错误: 合同 1) "before each" 挂钩 "Deploys a Contract"

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)

    });
});

这个错误怎么解决,代码很简单,我测试了获取账号没问题,deploy好像也可以,说到发送代码就不行了!有什么建议吗?

我 运行 遇到了类似的问题并修复了它:(您可以先尝试数字 2)。

  1. 已安装 web3@1.0.0-beta.37(注意:您的依赖项可能与我的非常不同,因为您使用的是 solidity ^0.4.17

  1. 在代码中添加了 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)

    });
});
  1. "Contract" 对象结构在此版本中发生了一些变化。因此,我还必须更新 compile.js 导出(您的 solidity 编译器版本可能不需要它)。