Truffle

如何設置塊前松露測試的超時?

  • November 7, 2021

我在私有鏈上執行我的測試,其中一些超時:

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

我嘗試根據 mocha 文件將超時設置為整個測試或之前的部分:

contract("looong tests", accounts => {
  this.timeout();

或者

before( done => {
  this.timeout(40000);

我收到了這個錯誤:

 1)  "before all" hook:
    TypeError: _this.timeout is not a function

添加 -t 命令行參數似乎沒有任何效果:

truffle test myTest.js -t 40000
truffle test myTest.js --timeout 40000

我在松露中看到一個舊的待定修復:https ://github.com/trufflesuite/truffle/issues/261

如何增加 before 語句的超時時間?

為單個測試案例添加超時有效,但不適用於 before 語句:(

  it('one long test', () => {
       ....
   }).timeout(40000 ); 

編輯:我現在有一個解決方法,將程式碼從之前移動到我同步的第一個測試:

  it('should go to before block but can't set timeout there', done =>  {
       new Promise( async function (resolve, reject) {
         // my before code 
         resolve();
       }).then( res => {
        done();
       });
   }).timeout(40000 ); 

將此添加到您的 Truffle 配置文件(truffle.jstruffle-config.js)中:

mocha: {
   enableTimeouts: false,
   before_timeout: 120000 // Here is 2min but can be whatever timeout is suitable for you.
}

如果您想保留超時(甚至為不同的測試配置不同的超時),那麼只需按照此處的說明進行操作。

作為對 goodvibration 提供的答案的修正:將程式碼片段放在truffle.js. 對我來說,它只在module.exports最高級別的內部工作(而不是在其他東西內部,例如networks)。

這對我有用:

module.exports = {
 mocha: {
   enableTimeouts: false
 }
};

引用自:https://ethereum.stackexchange.com/questions/19641