簡體   English   中英

對於異步測試和掛鈎,如何解決超時超出錯誤,請確保調用了“ done()”; 如果返回承諾,請確保其解決

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

我正在嘗試使用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)

    });
});

如何解決此錯誤,代碼很簡單,我測試了獲取帳戶的權限,還可以,也可以部署,但發送代碼不起作用! 有什么建議么?

我遇到了類似的問題,並按以下方式解決了這個問題:( 您可以先嘗試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. 在此版本中,“合同”對象結構有所更改。 因此,我還必須稍微更新一下compile.js導出( 您的Solidity編譯器版本可能不需要它 )。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM