jest/prefer-expect-assertions Style
作用
要求每个测试都必须将 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 中添加。
