如何在Mocha测试中调试“错误:承诺被拒绝,没有或有错误的原因”?

时间:2015-10-02 03:02:47

标签: javascript node.js promise mocha chai

我在Mocha中测试失败并出现此错误。

我在每个promise链的末尾放了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 :(得分:0)

我找到了触发错误的原因。我不得不宣传一个流,所以我把它包裹在return new Promise...

但是,承诺与常规回调具有不同的签名。回调中首先出现错误:function(err, res) { ... }。在承诺中,它恰恰相反:new Promise(function(resolve, reject) { ... }

我有new Promise(function(reject, resolve) { ... }。因此,当流完成时我正在调用resolve,而当流有错误时调用reject。但是,我的resolve实际上是reject函数而我的reject实际上是resolve函数,因为我将它们反转。