2
我正在嘗試爲我的Mongoose模型創建一些測試,並且我無法弄清楚如何讓Jest/Mockgoose測試傳遞給一個簡寫查詢/我創建的聚合管道(參見下面的第一個代碼塊),用於從一個集合中檢索另一個集合中未引用的隨機文檔。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()
}
玩笑測試
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
如何解決這個問題有,在這兩種環境中工作的通用的方式?如果可能,我希望該方法能夠返回承諾。我已經嘗試了鏈式聚合方法(參見上文)和更流行的管道Mongo聚合數組,但都返回錯誤。如果這是相關的,我的mongo版本是3.4.2。
如果您正在使用蒙戈3.5這個問題只發生* – JCM