首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用jest模拟多个调用链函数

如何用jest模拟多个调用链函数
EN

Stack Overflow用户
提问于 2021-12-28 08:38:59
回答 2查看 984关注 0票数 1

当我为我的项目编写单元测试时,我遇到的情况是,我需要在mongoose模块中模拟一个链接多个调用的函数。

如果它只调用.populate()一次,类似于下面的代码:

代码语言:javascript
运行
复制
await mongoose.model("routeDetail").find({
            _id: {
                $in: requestBody.routeIds,
            },
        })
            .populate("organizationId")

我可以很容易地模仿它,比如mocks/mongoose.js。

代码语言:javascript
运行
复制
module.exports = {
    model: jest.fn().mockReturnThis(),
    find: jest.fn().mockReturnThis(),
    populate: jest.fn().mockReturnThis(),
    sort: jest.fn().mockReturnThis(),
};

test/myFile.test.js

代码语言:javascript
运行
复制
mongoose.populate = jest.fn().mockReturnValueOnce(myValue);

但是..。在另一种情况下,.populate()被多次调用,如下面的代码,我不知道如何模拟它。

代码语言:javascript
运行
复制
await mongoose.model("routeDetail").find({
            _id: {
                $in: requestBody.routeIds,
            },
        })
            .populate("organizationId")
            .populate("deliverDetail.orderInfo")

有人有主意吗?请帮我解决这个案子,很多人!

EN

回答 2

Stack Overflow用户

发布于 2021-12-28 15:47:18

对于这个特定的例子,您可以模拟实现:

代码语言:javascript
运行
复制
const model = {
  find: jest.fn(() => ({
    populate: jest.fn(() => ({
      populate: jest.fn(() => Promise.resolve([])),
    })),
  })),
};

模型是一个具有find函数的对象,该函数返回一个带有populate函数的对象,该函数返回一个带有populate函数的对象,该函数返回解析空数组的Promise

票数 0
EN

Stack Overflow用户

发布于 2021-12-29 02:36:15

在文件.test.js中,在需要模拟的情况下编写下面的代码

代码语言:javascript
运行
复制
    mongoose.populate = jest.fn().mockReturnValue({
        populate: jest.fn().mockResolvedValueOnce({name:"mock value"})
    });

就这样。对我来说很管用

但是在其他情况下,当一个函数包含2个查询猫鼬时,第一个查询是

find().populate().populate()(调用populate()两次)

下一个是

find().populate() (只调用populate()一次)

再说一遍,我不知道该嘲笑什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70504594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档