Skip to content
← Back to rules

jest/no-untyped-mock-factory 风格

🛠️ An auto-fix is available for this rule for some violations.

它的作用

如果在未使用泛型类型参数或返回类型的情况下使用 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
// 使用 typeof import()
jest.mock<typeof import("../moduleName")>("../moduleName", () => {
  return jest.fn(() => 42);
});

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

// 使用自定义类型
jest.mock<() => number>("random-num", () => {
  return jest.fn(() => 42);
});

// 无工厂函数
jest.mock("random-num");

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

如何使用

要通过配置文件或 CLI 启用此规则,可以使用:

json
{
  "plugins": ["jest"],
  "rules": {
    "jest/no-untyped-mock-factory": "error"
  }
}
bash
oxlint --deny jest/no-untyped-mock-factory --jest-plugin

参考资料