You need to enable JavaScript to run this app. 使用Jest Mock嵌套函数,如何mock repo.getOrganisations返回值
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 02:27:03