2015-10-02 84 views
0

我有一個測試失敗在摩卡與此錯誤。如何在Mocha測試中調試「錯誤:無諾或拒絕原因拒絕承諾」?

我已經把catch陳述放在每個承諾鏈的末尾,拋出它們通過的任何錯誤,但它們從不被調用。

然而測試保持與下面的錯誤而失敗:

Error: Promise rejected with no or falsy reason 
    at tryCatcher (node_modules/bluebird/js/main/util.js:26:23) 
    at Promise._settlePromiseFromHandler (node_modules/bluebird/js/main/promise.js:507:31) 
    at Promise._settlePromiseAt (node_modules/bluebird/js/main/promise.js:581:18) 
    at Promise._settlePromises (node_modules/bluebird/js/main/promise.js:697:14) 
    at Async._drainQueue (node_modules/bluebird/js/main/async.js:123:16) 
    at Async._drainQueues (node_modules/bluebird/js/main/async.js:133:10) 
    at Immediate.Async.drainQueues [as _onImmediate] (node_modules/bluebird/js/main/async.js:15:14) 

我如何找出問題到底是什麼,其承諾被拒絕,並得到一個更有意義的痕跡?

+1

這將有助於包含您的測試代碼。 –

回答

0

我發現了什麼引發了錯誤。我必須promisify一個流,所以我把它包裹在return new Promise...

但是,承諾有不同於常規回調的簽名。回調中首先出現錯誤:function(err, res) { ... }。在承諾中,情況正好相反:new Promise(function(resolve, reject) { ... }。我有new Promise(function(reject, resolve) { ... }。因此,當流完成時我打電話給resolve,當流發生錯誤時我打電話給reject。然而,我的resolve實際上是reject函數和我的reject實際上是resolve函數,因爲我倒過來了。

+0

謝謝你是我的問題。 在Promise簽名首先解決,拒絕第二 – Proximo

+0

也許你可以在這裏使用藍鳥'Promisify'或'PromisifyAll'函數將回調轉換爲承諾 - 請參閱:http://bluebirdjs.com/docs/api/promise.promisify。 HTML –