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