使用节点版本10和MongoDB数据库运行Mocha测试时,我遇到了一个巨大的错误:
(节点:27884)UnhandledPromiseRejectionWarning:AssertionError [ERR_ASSERTION]:表达式计算为虚假值:
assert( user.blogPosts [0] .comments [0] .content === “随着程序变得越来越大,它们也会变得越来越复杂”)
at User.findOne.populate.then.user (/Users/danale/Projects/users/test/association_test.js:50:9) at process._tickCallback (internal/process/next_tick.js:68:7) (node:27884) UnhandledPromiseRejectionWarning: Unhandled promise
拒绝。该错误是由抛出异步内部引起的 没有捕获块或拒绝承诺 未使用.catch()处理。 (拒绝ID:1)(节点:27884)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。在 未来,未处理的承诺拒绝将终止 具有非零退出代码的Node.js进程。
对于较早运行的Mocha测试:
it('saves a full relation graph', done => {
User.findOne({ name: 'Joe' })
.populate({
path: 'blogPosts',
populate: {
path: 'comments',
model: 'comment',
populate: {
path: 'user',
model: 'user'
}
}
})
.then(user => {
assert(user.name === 'Joe');
assert(user.blogPosts[0].title === 'Eloquent JavaScript');
assert(
user.blogPosts[0].comments[0].content ===
'As programs get bigger, they also become more complex'
);
assert(user.blogPosts[0].comments[0].user.name === 'Joe');
done();
});
});
所以我知道问题出在这里:
assert(
user.blogPosts[0].comments[0].content ===
'As programs get bigger, they also become more complex'
);
但是这到底是什么问题?
答案 0 :(得分:0)
您需要一个catch
块来查找。 populate()返回一个promise,但是当promise失败时,它们必须被捕获并处理。
有关更多信息,请参见the docs,但可以将其视为您可能已经熟悉的try { } catch { }
块。
您的代码在此处附加了catch和发生的错误的日志。
it('saves a full relation graph', done => {
User.findOne({ name: 'Joe' })
.populate({
path: 'blogPosts',
populate: {
path: 'comments',
model: 'comment',
populate: {
path: 'user',
model: 'user'
}
}
})
.then(user => {
assert(user.name === 'Joe');
assert(user.blogPosts[0].title === 'Eloquent JavaScript');
assert(
user.blogPosts[0].comments[0].content ===
'As programs get bigger, they also become more complex'
);
assert(user.blogPosts[0].comments[0].user.name === 'Joe');
done();
})
.catch((err) => {
console.error("Handling promise rejection", err);
});
});
答案 1 :(得分:0)
该错误消息适用于我正在测试的content
,因为我在content
块中测试了错误的it()
。我正在content
内测试beforeEach()
:
beforeEach(done => {
joe = new User({ name: 'Joe' });
blogPost = new BlogPost({
title: 'Eloquent JavaScript',
content: 'As programs get bigger, they also become more complex'
});
当我真的在这里尝试测试content
对象中的comment
时:
comment = new Comment({ content: 'Love this post' });
一旦我将其更正为上面合适的content
,所有测试都将通过。