Skip to content
← Back to rules

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

참고자료