jest/no-conditional-expect 정확성
동작 방식
이 규칙은 조건부 블록(예: if 및 catch 등) 내에서 expect를 사용하는 것을 방지합니다.
이는 catch라는 이름을 가진 함수의 콜백 내에서도 expect를 사용하는 경우를 포함하며, 이러한 함수는 프로미스라고 가정됩니다.
왜 문제가 되는가?
Jest는 오직 예외가 발생할 때만 테스트가 실패로 간주합니다. 따라서 expect와 같은 검증 함수 호출이 catch 문과 같은 조건부 코드 내에서 발생하면, 테스트가 통과되지만 실제로 아무것도 검증하지 않는 결과가 될 수 있습니다. 또한 조건문은 테스트를 더 취약하고 복잡하게 만들며, 실제로 어떤 것이 검증되고 있는지 이해하기 위해 더 많은 사고 과정이 필요하게 됩니다.
예시
이 규칙에 적합하지 않은 코드 예시:
js
it("foo", () => {
doTest && expect(1).toBe(2);
});
it("bar", () => {
if (!skipTest) {
expect(1).toEqual(2);
}
});
it("baz", async () => {
try {
await foo();
} catch (err) {
expect(err).toMatchObject({ code: "MODULE_NOT_FOUND" });
}
});
it("오류를 발생시킵니다", async () => {
await foo().catch((error) => expect(error).toBeInstanceOf(error));
});이 규칙에 적합한 코드 예시:
js
it("foo", () => {
expect(!value).toBe(false);
});
function getValue() {
if (process.env.FAIL) {
return 1;
}
return 2;
}
it("foo", () => {
expect(getValue()).toBe(2);
});
it("요청 검증", () => {
try {
processRequest(request);
} catch {
} finally {
expect(validRequest).toHaveBeenCalledWith(request);
}
});
it("오류를 발생시킵니다", async () => {
await expect(foo).rejects.toThrow(Error);
});이 규칙은 eslint-plugin-vitest와 호환됩니다. 이를 사용하려면 .oxlintrc.json에 다음 구성 항목을 추가하세요:
json
{
"rules": {
"vitest/no-conditional-expect": "error"
}
}사용 방법
이 규칙을 구성 파일 또는 CLI를 통해 활성화하려면 다음을 사용할 수 있습니다:
json
{
"plugins": ["jest"],
"rules": {
"jest/no-conditional-expect": "error"
}
}bash
oxlint --deny jest/no-conditional-expect --jest-plugin