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

参照