使用Jest Mock嵌套函数,如何mock repo.getOrganisations返回值
你只需要让getOrganisationsRepo的mock返回值中,携带mock后的getOrganisations方法即可,具体实现如下:
1. 调整基础Mock配置
提前声明getOrganisations的mock函数,方便后续在不同测试用例中控制其返回值:
// 声明repo.getOrganisations的mock方法 const mockGetOrganisations = jest.fn(); jest.mock("Repositories"); // 用mockResolvedValue简写空Promise返回,和你原实现效果一致 mockRepositories.initRepo.mockResolvedValue(); // 让getOrganisationsRepo返回的Promise resolve出带mock方法的repo对象 mockRepositories.getOrganisationsRepo.mockResolvedValue({ getOrganisations: mockGetOrganisations });
2. 不同场景测试用例示例
测试非空数组返回200状态码
test("获取到组织列表时返回200", async () => { // 自定义getOrganisations的返回值 const mockOrgData = [{ id: 1, name: "组织A" }, { id: 2, name: "组织B" }]; mockGetOrganisations.mockResolvedValue(mockOrgData); const res = await getOrganisations({}); expect(res.statusCode).toBe(200); expect(JSON.parse(res.body)).toEqual(mockOrgData); // 可选:验证方法调用次数 expect(mockRepositories.initRepo).toHaveBeenCalledTimes(1); expect(mockGetOrganisations).toHaveBeenCalledTimes(1); });
测试空数组返回404状态码
test("未查到组织时返回404", async () => { mockGetOrganisations.mockResolvedValue([]); const res = await getOrganisations({}); expect(res.statusCode).toBe(404); });
测试返回非数组值返回400状态码
test("返回值异常时返回400", async () => { mockGetOrganisations.mockResolvedValue(null); const res = await getOrganisations({}); expect(res.statusCode).toBe(400); });
测试抛出异常场景
test("调用DB方法报错时返回400", async () => { const mockError = new Error("DB连接失败"); mockGetOrganisations.mockRejectedValue(mockError); const res = await getOrganisations({}); expect(res.statusCode).toBe(400); expect(res.body).toBe(mockError.message); });
内容的提问来源于stack exchange,提问作者chinds
相关产品推荐
相关产品推荐

