【发布时间】:2022-01-26 22:57:17
【问题描述】:
当我为我的项目编写单元测试时, 我遇到了需要在 mongoose 模块中模拟一个函数链式多次调用的情况。
如果它只调用 .populate() 一次,如下面的代码:
await mongoose.model("routeDetail").find({
_id: {
$in: requestBody.routeIds,
},
})
.populate("organizationId")
我可以轻松地模拟它,例如 模拟 /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")
有人知道吗? 请帮我解决这个问题,谢谢!
-
不要嘲笑你不拥有的东西。 Mongoose 有一个复杂的 API,将其抽象为您 确实 拥有的接口并模拟 that 以进行单元测试。使用集成测试来验证实际查询。
-
我知道,但我目前不想重构代码,因为资源人力等许多原因,所以我可以继续这样做