當我為我的專案撰寫單元測驗時,我遇到了我需要在 mongoose 模塊中模擬一個鏈接多個呼叫的函式的情況。
如果它只像下面的代碼一樣呼叫 .populate() 一次:
await mongoose.model("routeDetail").find({
_id: {
$in: requestBody.routeIds,
},
})
.populate("organizationId")
我可以輕松地模擬它,例如 mocks /mongoose.js
module.exports = {
model: jest.fn().mockReturnThis(),
find: jest.fn().mockReturnThis(),
populate: jest.fn().mockReturnThis(),
sort: jest.fn().mockReturnThis(),
};
測驗/myFile.test.js
mongoose.populate = jest.fn().mockReturnValueOnce(myValue);
但是...在另一種情況下 .populate() 被多次呼叫,例如下面的代碼,我不知道如何模擬它。
await mongoose.model("routeDetail").find({
_id: {
$in: requestBody.routeIds,
},
})
.populate("organizationId")
.populate("deliverDetail.orderInfo")
有人有想法嗎?請幫我解決這個案例,很多tks!
uj5u.com熱心網友回復:
對于該特定示例,您可以模擬實作:
const model = {
find: jest.fn(() => ({
populate: jest.fn(() => ({
populate: jest.fn(() => Promise.resolve([])),
})),
})),
};
模型是一個物件,它具有一個find函式,該函式回傳一個物件,該populate函式回傳一個物件,該populate函式回傳一個Promise決議空陣列的函式。
uj5u.com熱心網友回復:
我找到了解決方案!
在檔案 .test.js 中,在需要模擬的案例測驗中撰寫下面的代碼
mongoose.populate = jest.fn().mockReturnValue({
populate: jest.fn().mockResolvedValueOnce({name:"mock value"})
});
就這樣。它對我有用
但在其他情況下,當一個函式包含 2 個查詢 mongoose 時,第一個查詢是
find().populate().populate()(呼叫 populate() 兩次)
接下來是
find().populate() (只呼叫 populate() 一次)
再次,我不知道要嘲笑。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/396566.html
上一篇:數字貨幣&數字法幣的未來
下一篇:將某個欄位集合在一個陣列中
