跳至内容

jest/no-untyped-mock-factory 样式

🛠️ 对于此规则,对于某些违规行为可以使用自动修复。

它的作用

如果使用 mock()doMock() 而没有常规类型参数或返回类型,那么此规则将触发一个警告。

为什么这不好?

默认情况下,jest.mockjest.doMock 允许任何类型由一个模拟工厂返回。一个常规类型参数可以用来强制要求工厂返回一个和原始模块具有相同形状的对象,或者其他一些严格类型。要求类型使使用 TypeScript 来捕捉在源模块改变时测试模拟中所需的更改变得更容易。

示例

// 不正确

typescript
jest.mock("../moduleName", () => {
  return jest.fn(() => 42);
});

jest.mock("./module", () => ({
  ...jest.requireActual("./module"),
  foo: jest.fn(),
}));

jest.mock("random-num", () => {
  return jest.fn(() => 42);
});

// 正确

typescript
// Uses typeof import()
jest.mock<typeof import("../moduleName")>("../moduleName", () => {
  return jest.fn(() => 42);
});

jest.mock<typeof import("./module")>("./module", () => ({
  ...jest.requireActual("./module"),
  foo: jest.fn(),
}));

// Uses custom type
jest.mock<() => number>("random-num", () => {
  return jest.fn(() => 42);
});

// No factory
jest.mock("random-num");

// Virtual mock
jest.mock(
  "../moduleName",
  () => {
    return jest.fn(() => 42);
  },
  { virtual: true },
);

参考文献

在麻省理工许可证下发布。