我有以下验证函数检查用户是否存在:
validate.user = async (user, password) => {
const matches = await bcrypt.compare(password, user.password);
if (matches) return user;
if (!matches) {
return validate.logAndThrow('User password does not match');
}
return validate.logAndThrow('Error in bcrypt compare');
};
以下使用Chai的测试应对此进行测试:
chai.use(sinonChai);
const { expect } = chai;
describe('#user', () => {
it('show throw if user is undefined', () => {
expect(() => validate.user(undefined, 'pass')).to.throw('User does not exist');
});
错误确实会被抛出,但是mocha在控制台中显示以下内容:
2)显示抛出,如果用户是未定义的(节点: 18587)UnhandledPromiseRejse警告:未处理的promise拒绝(拒绝id: 2):错误:用户不存在
所以我的问题是,我如何重写测试,让它捕捉到promise拒绝?
我不完全确定是摩卡咖啡抛出了未经处理的拒绝。
我认为你的bcrypt.compare本质上是异步的,使用回调。wait
不能真正在异步函数中开箱即用。
但是,您可以使用节点util
库提示异步调用,如下所示:
const util = require('util');
const bcrypt = require('bcrypt');
const bcryptCompare = util.promisify(bcrypt.compare);
现在你可以使用wait bCryptCompare(密码,user.password);
就像你想的那样。
另外,要使用async/await
处理拒绝,您应该像这样使用try/catch
:
let matches;
try {
matches = await bcryptCompare(password, user.password);
} catch(bcryptError) {
throw new Error(bcryptError);
}
要测试基于promise的函数(异步),请使用chai作为promise插件:
expect(validate.user(undefined, 'pass')).to.be.rejectedWith(Error, 'User does not exist');
在这种情况下,你不把()=
我希望这是清楚的:)如果你有任何问题-随时问。
我得到这个错误- (节点:18420)未处理的PromisejectionWarning:TypeError:无法读取未定义的属性“name” (节点:18420)未处理的PromisejectionWarning:未处理的promise拒绝。此错误源于在没有catch块的情况下抛出异步函数的内部,或者拒绝使用未处理的promise。catch()。要在未处理的promise拒绝时终止节点进程,请
我想在Repl上为我的游戏实现一个基本的排行榜。它,所以我创建了一个节点。js后端。这是我在后端的配置: 但是每当我尝试发布时,我都会得到以下错误: (节点:344)未处理的PromisejectionWarning:TypeError:无法读取null的属性“push” (节点:344)UnhandledPromiseRejtionWarning:未处理的promise拒绝。这个错误要么是由于抛
我正在与节点JS中的promise模式作斗争 我在db中寻找用户,然后用用户引用保存新实体,但当用户不在db中时,我应该返回拒绝,但我不确定如何正确地做到这一点。 有什么办法可以做得更好吗? btw:对不起,coffeescript :-[
为了学习角度2,我正在尝试他们的教程。 我得到这样的错误: 我在SO中浏览了不同的问题和答案,但没有发现什么是“未处理的promise拒绝”。 有人能简单地解释一下它是什么,以及<code>错误:生成cmd ENOENT</code>是什么,当它出现时,我需要检查什么才能消除这个警告吗?
本文介绍了单个promise组合器: 但我没有看到的是,一种运行所有promise的方法,但不是在个人promise被拒绝时短路。我如何确保所有的promise都得到履行,但我能处理拒绝和所有promise的解决?
当我运行部署我的应用程序的命令时,我发现以下错误 (节点: 6292)UnhandledPromiseRejtionWarning: UnHandledPromiseRejtionWarning: UnHandledPromiseRejtionWarning: UnHandledPromiseRejtionWarning: UnHandledPromiseRejtionWarning: UnHan