Skip to content
← Back to rules

jest/prefer-expect-resolves 스타일

An auto-fix is available for this rule.

동작 방식

비동기 프로미스를 테스트할 때, expect(await ...)보다는 await expect(...).resolves를 사용하는 것을 권장합니다.

왜 나쁜가요?

프로미스를 다룰 때 해결된 값을 테스트하는 데에는 두 가지 주요 방법이 있습니다:

  1. expectresolve 수정자를 사용하기 (await expect(...).resolves.<매처> 스타일)
  2. 프로미스를 await하고 그 결과에 대해 검증하기 (expect(await ...).<매처> 스타일)

두 번째 방식은 jest에 의존도가 덜하다고 할 수 있지만, 프로미스가 거부될 경우 일반적인 오류로 처리되며, 이로 인해 jest의 동작과 출력이 예측하기 어려워집니다.

또한 첫 번째 방식을 선호함으로써 rejects와의 일관성을 유지할 수 있으며, 거부 상황을 "대기"하는 방법이 존재하지 않기 때문입니다.

예시

이 규칙에 대한 잘못된 코드 예시:

javascript
it("성공", async () => {
  expect(await someValue()).toBe(true);
});
it("참", async () => {
  const myPromise = Promise.resolve(true);
  expect(await myPromise).toBe(true);
});

이 규칙에 대한 올바른 코드 예시:

javascript
it("성공", async () => {
  await expect(someValue()).resolves.toBe(true);
});
it("참", async () => {
  const myPromise = Promise.resolve(true);

  await expect(myPromise).resolves.toBe(true);
});
it("오류 발생", async () => {
  await expect(Promise.reject(new Error("아이고!"))).rejects.toThrowError("아이고!");
});

이 규칙은 eslint-plugin-vitest와 호환됩니다. 이를 사용하려면 .oxlintrc.json에 다음 설정을 추가하세요:

json
{
  "rules": {
    "vitest/prefer-expect-resolves": "error"
  }
}

사용 방법

구성 파일 또는 CLI를 통해 이 규칙을 활성화하려면 다음과 같이 사용할 수 있습니다:

json
{
  "plugins": ["jest"],
  "rules": {
    "jest/prefer-expect-resolves": "error"
  }
}
bash
oxlint --deny jest/prefer-expect-resolves --jest-plugin

참고자료