如何在 Mocha 测试中调试“错误:无理由或错误理由拒绝承诺”?
Posted
技术标签:
【中文标题】如何在 Mocha 测试中调试“错误:无理由或错误理由拒绝承诺”?【英文标题】:How to debug "Error: Promise rejected with no or falsy reason" in Mocha tests? 【发布时间】:2015-12-30 05:42:12 【问题描述】:我在 Mocha 中的测试失败并出现此错误。
我已将 catch
语句放在每个 Promise 链的末尾,这些语句会抛出任何错误,但它们不会被调用。
但测试仍然失败并出现以下错误:
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】:我找到了触发错误的原因。我不得不承诺一个流,所以我把它包装在 return new Promise...
但是,promise 与常规回调有不同的签名。回调中首先出现错误:function(err, res) ...
。在 Promise 中,情况正好相反:new Promise(function(resolve, reject) ...
。
我有new Promise(function(reject, resolve) ...
。因此,我在流完成时调用resolve
,在流出现错误时调用reject
。但是,我的 resolve
实际上是 reject
函数,而我的 reject
实际上是 resolve
函数,因为我将它们反转了。
【讨论】:
谢谢,这是我的问题。在 Promise 签名中首先解析,然后拒绝 也许你可以在这里使用 bluebirdsPromisify
或 PromisifyAll
函数,它们会将回调转换为 Promise - 请参阅:bluebirdjs.com/docs/api/promise.promisify.html以上是关于如何在 Mocha 测试中调试“错误:无理由或错误理由拒绝承诺”?的主要内容,如果未能解决你的问题,请参考以下文章