Skip to content
← Back to rules

jest/prefer-expect-assertions Style

💡 A suggestion is available for this rule.

作用

要求每个测试都必须将 expect.assertions(<number>)expect.hasAssertions() 作为第一条表达式。

为什么这不好?

如果没有显式的断言计数,包含异步代码、回调或循环的测试即使某些 expect 调用从未 执行到,也可能通过,从而悄悄隐藏 bug。

示例

以下是此规则的错误代码示例:

javascript
test("no assertions", () => {
  // ...
});
test("assertions not first", () => {
  expect(true).toBe(true);
  // ...
});

以下是此规则的正确代码示例:

javascript
test("with assertion count", () => {
  expect.assertions(1);
  expect(true).toBe(true);
});
test("with hasAssertions", () => {
  expect.hasAssertions();
  expect(true).toBe(true);
});

///以下是带有 { "onlyFunctionsWithAsyncKeyword": true }错误代码示例:

javascript
test("fetches data", async () => {
  const data = await fetchData();
  expect(data).toBe("peanut butter");
});

以下是带有 { "onlyFunctionsWithAsyncKeyword": true }正确代码示例:

javascript
test("fetches data", async () => {
  expect.assertions(1);
  const data = await fetchData();
  expect(data).toBe("peanut butter");
});

以下是带有 { "onlyFunctionsWithExpectInLoop": true }错误代码示例:

javascript
test("all numbers are greater than zero", () => {
  for (const number of getNumbers()) {
    expect(number).toBeGreaterThan(0);
  }
});

以下是带有 { "onlyFunctionsWithExpectInLoop": true }正确代码示例:

javascript
test("all numbers are greater than zero", () => {
  expect.hasAssertions();
  for (const number of getNumbers()) {
    expect(number).toBeGreaterThan(0);
  }
});

以下是带有 { "onlyFunctionsWithExpectInCallback": true }错误代码示例:

javascript
test("callback test", () => {
  fetchData((data) => {
    expect(data).toBe("peanut butter");
  });
});

以下是带有 { "onlyFunctionsWithExpectInCallback": true }正确代码示例:

javascript
test("callback test", () => {
  expect.assertions(1);
  fetchData((data) => {
    expect(data).toBe("peanut butter");
  });
});

配置

此规则接受一个包含以下属性的配置对象:

onlyFunctionsWithAsyncKeyword

type: boolean

default: false

onlyFunctionsWithExpectInCallback

type: boolean

default: false

onlyFunctionsWithExpectInLoop

type: boolean

default: false

使用方法

To enable this rule using the config file or in the CLI, you can use:

json
{
  "plugins": ["jest"],
  "rules": {
    "jest/prefer-expect-assertions": "error"
  }
}
ts
import { defineConfig } from "oxlint";

export default defineConfig({
  plugins: ["jest"],
  rules: {
    "jest/prefer-expect-assertions": "error",
  },
});
bash
oxlint --deny jest/prefer-expect-assertions --jest-plugin

版本

此规则在 v1.62.0 中添加。

参考资料