gpt4 book ai didi

mongodb - Mongoose 聚合查询在 Jest/Mockgoose 测试中失败,在其他地方有效

转载 作者:可可西里 更新时间:2023-11-01 09:07:18 25 4
gpt4 key购买 nike

我正在尝试为我的 Mongoose 模型创建一些测试,但我无法弄清楚如何让 Jest/Mockgoose 测试通过我的速记查询/聚合管道(见下面的第一个代码块)创建用于从一个集合中检索未在另一个集合中引用的随机文档。

activitySchema.query.getUnused = function() {
return Activity.aggregate()
.lookup({
from: 'userActivity',
localField: '_id',
foreignField: 'activity',
as: 'matched_docs',
})
.match({ matched_docs: { $eq: [] } })
.sample(1)
.project({ matched_docs: 0, __v: 0 })
.exec()
}

Jest 测试

describe('Activity methods', () => {
test('Activity unused query executes', (done) => {
function createActivity() {
return Activity
.create({ activity: 'running' })
.then(activity => {
console.log('Activity is generated')
return Promise.resolve(true)
})
}
async function retrieveActivity() {
await createActivity()
Activity
.find()
.getUnused()
.then(unused => {
console.log(unused);
expect(unused).toHaveLength(1)
done()
})
.catch(x => {
console.log(x)
})
}


return retrieveActivity()
})

})

沙盒节点 JS 代码:

Activity.find().getUnused()
.then((x) => {
console.log(x);
})

当我在沙箱节点文件中尝试时,机智正常工作并检索典型的查询集,如:

   [ { _id: 58f3dee3b0346910a69e6e5d, activity: 'running', __v: 0 } ]

当我运行测试时,我得到这个 MongoError:

The 'cursor' option is required, except for aggregation explain

如何使用适用于两种情况的通用方式解决此问题?如果可能的话,我希望该方法返回一个 promise 。我已经尝试了链式聚合方法(见上文)和更原生的 Mongo 管道聚合数组,但都返回错误。如果相关的话,我的 mongo 版本是 3.4.2。

最佳答案

我遇到过类似的问题,经过大量研究后我发现这是由于旧版本的 Mongoose 造成的,因为早期版本与 MongoDB 3.6 及更高版本中的重大更改不兼容。

我一个一个地升级了 mongoose 版本,我发现它与 mongoose 版本 4.12.2 或更高版本 (mongoose@4.12.2) 一起工作得很好。

您可以通过运行以下命令升级您的 mongoose 版本:

npm install mongoose@4.12.2

关于mongodb - Mongoose 聚合查询在 Jest/Mockgoose 测试中失败,在其他地方有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43442588/

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