Skip to content
← Back to rules

jest/prefer-hooks-in-order 风格

它做了什么

确保钩子按照它们被调用的顺序进行排列。

为什么这是不好的?

虽然钩子可以以任意顺序设置,但 jest 总是按以下特定顺序调用它们:

  1. beforeAll
  2. beforeEach
  3. afterEach
  4. afterAll

此规则通过强制在测试中分组的钩子按该顺序设置,使这一点更加明显。

示例

此规则的 错误 代码示例:

javascript
describe("foo", () => {
  beforeEach(() => {
    seedMyDatabase();
  });
  beforeAll(() => {
    createMyDatabase();
  });
  it("接受此输入", () => {
    // ...
  });
  it("返回该值", () => {
    // ...
  });
  describe("当数据库具有特定值时", () => {
    const specificValue = "...";
    beforeEach(() => {
      seedMyDatabase(specificValue);
    });
    it("接受该输入", () => {
      // ...
    });
    it("抛出错误", () => {
      // ...
    });
    afterEach(() => {
      clearLogger();
    });
    beforeEach(() => {
      mockLogger();
    });
    it("记录一条消息", () => {
      // ...
    });
  });
  afterAll(() => {
    removeMyDatabase();
  });
});

此规则的 正确 代码示例:

javascript
describe("foo", () => {
  beforeAll(() => {
    createMyDatabase();
  });
  beforeEach(() => {
    seedMyDatabase();
  });
  it("接受此输入", () => {
    // ...
  });
  it("返回该值", () => {
    // ...
  });
  describe("当数据库具有特定值时", () => {
    const specificValue = "...";
    beforeEach(() => {
      seedMyDatabase(specificValue);
    });
    it("接受该输入", () => {
      // ...
    });
    it("抛出错误", () => {
      // ...
    });
    beforeEach(() => {
      mockLogger();
    });
    afterEach(() => {
      clearLogger();
    });
    it("记录一条消息", () => {
      // ...
    });
  });
  afterAll(() => {
    removeMyDatabase();
  });
});

此规则与 eslint-plugin-vitest 兼容。要使用它,请将以下配置添加到你的 .oxlintrc.json 文件中:

json
{
  "rules": {
    "vitest/prefer-hooks-in-order": "error"
  }
}

如何使用

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

json
{
  "plugins": ["jest"],
  "rules": {
    "jest/prefer-hooks-in-order": "error"
  }
}
bash
oxlint --deny jest/prefer-hooks-in-order --jest-plugin

参考资料