jest/prefer-expect-resolves 스타일
동작 방식
비동기 프로미스를 테스트할 때, expect(await ...)보다는 await expect(...).resolves를 사용하는 것을 권장합니다.
왜 나쁜가요?
프로미스를 다룰 때 해결된 값을 테스트하는 데에는 두 가지 주요 방법이 있습니다:
expect에resolve수정자를 사용하기 (await expect(...).resolves.<매처>스타일)- 프로미스를
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