2017-08-14 98 views
-1

我試圖測試一個異步函數。但摩卡總是記錄超時錯誤。摩卡錯誤:超過2000毫秒超時。確保在此測試中調用done()回調

// iframe.js 
var iframe_client_util = {}; 
iframe_client_util.findByKeyFrame = function (keyFrame, cb) { 
    ModelIframeClient.find({key_frame: keyFrame}).exec(function (err, rs) { 
     if (err) return cb(err, null); 

     cb(null, rs); 
    }); 
}; 



// test.js 
var assert = require("assert"); 
var iframe_util = require("./iframe"); 
describe('1. _checkAuthorization', function() { 
    it("Using setTimeout to simulate asynchronous code!", function (done) { 
     iframe_util.findByKeyFrame("598ad74b1ca8870b0072b6e9", function (err, result) { 
      assert.equal(true, true); 
      done(); 
     }); 
    }); 
}); 

然後摩卡日誌這個錯誤,當我運行mocha test.js

Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.

我按照這份文件:https://mochajs.org/#asynchronous-code

+1

該測試似乎需要超過2000毫秒。也許測試一個假的異步函數? – evolutionxbox

+0

@evolutionxbox iframe_util.findByKeyFrame是「假異步功能」? –

回答

0

我解決了這個問題。我沒有連接到mongoDB,iframe_util.findByKeyFrame函數無法運行。它需要mongoose.connect();之前描述。

+0

如果您在此刪除自己的答案,則應該可以刪除您的問題。這比問社區「關閉這個問題」要快。 – Louis

0

您可以使用this.timeout(x);或當您撥打摩卡指定超時值時使用mocha --timeout x來設置每次測試的超時時間,其中x是超時量。

var assert = require("assert"); 
var iframe_util = require("./iframe"); 
describe('1. _checkAuthorization', function() { 
    it("Using setTimeout to simulate asynchronous code!", function (done) { 
     this.timeout(x); // x is timeout amount 
     iframe_util.findByKeyFrame("598ad74b1ca8870b0072b6e9", function (err, result) { 
      assert.equal(true, true); 
      done(); 
     }); 
    }); 
}); 
+1

當我設置'this.timeout(3000);'顯示'錯誤:超過3000ms超時。確保done()回調在本次測試中被調用。只是不知道爲什麼。 –

+0

嘗試用更大的超時時間 –

+1

我試着用更大的超時時間。但沒有任何改變。 '錯誤:超過300000ms超時。確保在此測試中正在調用done()回調。' –

相關問題