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"
  }
}

사용 방법

구성 파일 또는 커맨드라인을 통해 이 규칙을 활성화하려면 다음을 사용할 수 있습니다:

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

참고 자료