gpt4 book ai didi

javascript - Mocha、should.js 和 Promise catch 回调

转载 作者:行者123 更新时间:2023-12-03 08:20:59 26 4
gpt4 key购买 nike

我试图在使用 mocha 的异步 promise 失败测试中断言正确的错误消息,但我的测试没有通过,我不知道为什么。

这是代码 - promise 是

'use strict';

let getFailingPromise = function() {

return new Promise(function(resolve, reject) {

// simply fail on the next tick
setTimeout(function() {

reject(new Error('No reason.'));
});
});
}

describe('failing promise catcher', function() {

it('should fail and I should catch it', function(done) {

let promise = getFailingPromise();
promise.catch(function(err) {

console.log('Error message:', err.message); // => Error message: No reason.
console.log(err.message === 'No reason.'); // => true
err.message.should.equal('No reason.');
done(); // => Never reached.
});
});
});

我知道 Mocha 无法捕获异步异常。但上面的代码都是干净的,没有抛出任何错误 - 或者不应该有任何错误。

编辑:添加调用的输出:

[zlatko@obelix ~/tmp]$ mocha test.spec.js 


failing promise catcher
Error message: No reason.
true
1) should fail and I should catch it


0 passing (2s)
1 failing

1) failing promise catcher should fail and I should catch it:
Error: timeout of 2000ms exceeded
at null.<anonymous> (/usr/lib/node_modules/mocha/lib/runnable.js:158:19)
at Timer.listOnTimeout (timers.js:89:15)

我不明白什么?

最佳答案

您可能没有加载 should 来实现 err.message.should.equal(),因此运行时会引发异常。

通常,在 .catch() 中抛出的异常将被忽略,除非您将另一个 .catch() 子句添加到您的 Promise 链中(正如 @Bergi 在评论)。

另一种选择是使用更精细的 Promise 实现,它会警告您未处理的拒绝,例如 bluebird ,这会向您展示:

Unhandled rejection TypeError: Cannot read property 'equal' of undefined
at ...

关于javascript - Mocha、should.js 和 Promise catch 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33753033/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com