Skip to content
← Back to rules

jest/prefer-hooks-on-top スタイル

何を実行するか

テストファイル内のどこにでもフックを設定できますが、フックは常に特定の順序で呼び出されるため、テストケースと混在させると混乱しやすくなります。

なぜこれは問題か

フックとテストケースが混在していると、テストのセットアップおよび実行順序を理解するのが難しくなります。これにより、どのフックがどのテストに適用されるのか、いつ実行されるのかについて誤解を生む可能性があります。各 describe ブロックの先頭にフックをグループ化することで、テスト構造が明確になり、保守性も高まります。

このルールに違反する不適切なコード例:

javascript
describe("foo", () => {
  beforeEach(() => {
    seedMyDatabase();
  });

  it("この入力を受け入れる", () => {
    // ...
  });

  beforeAll(() => {
    createMyDatabase();
  });

  it("その値を返す", () => {
    // ...
  });

  describe("データベースに特定の値がある場合", () => {
    const specificValue = "...";
    beforeEach(() => {
      seedMyDatabase(specificValue);
    });

    it("その入力を受け入れる", () => {
      // ...
    });

    it("エラーをスローする", () => {
      // ...
    });

    afterEach(() => {
      clearLogger();
    });

    beforeEach(() => {
      mockLogger();
    });

    it("メッセージをログに記録する", () => {
      // ...
    });
  });

  afterAll(() => {
    removeMyDatabase();
  });
});

このルールに準拠する適切なコード例:

javascript
describe("foo", () => {
  beforeAll(() => {
    createMyDatabase();
  });

  beforeEach(() => {
    seedMyDatabase();
  });

  afterAll(() => {
    clearMyDatabase();
  });

  it("この入力を受け入れる", () => {
    // ...
  });

  it("その値を返す", () => {
    // ...
  });

  describe("データベースに特定の値がある場合", () => {
    const specificValue = "...";

    beforeEach(() => {
      seedMyDatabase(specificValue);
    });

    beforeEach(() => {
      mockLogger();
    });

    afterEach(() => {
      clearLogger();
    });

    it("その入力を受け入れる", () => {
      // ...
    });

    it("エラーをスローする", () => {
      // ...
    });

    it("メッセージをログに記録する", () => {
      // ...
    });
  });
});

このルールは eslint-plugin-vitest と互換性があります。使用するには、.oxlintrc.json に以下の設定を追加してください:

json
{
  "rules": {
    "vitest/prefer-hooks-on-top": "error"
  }
}

使用方法

このルールを設定ファイルまたは CLI で有効化するには、次のように使用できます:

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

参照