Skip to content
← Back to rules

jest/no-restricted-matchers 스타일

작동 방식

특정 매처 및 수식어 사용을 금지하고, 대안을 제안할 수 있습니다.

왜 나쁜가요?

코드베이스 내에서 여러 이유로 일부 매처 또는 수식어를 권장하지 않을 수 있습니다: 해당 기능이 폐기되었을 수 있고, 혼란을 유발할 수 있으며, 성능에 부정적 영향을 미칠 수 있으며, 더 좋은 대안이 존재할 수도 있습니다. 이 규칙을 통해 특정 Jest 매처를 제한하고 선호되는 대안에 대한 안내를 제공함으로써 일관된 테스트 패턴을 강제할 수 있습니다.

예시

금지 항목은 맵 형태로 표현되며, 값은 표시할 메시지 문자열이거나, 기본 규칙 메시지만 사용하려는 경우 null입니다. 금지는 expect 체인의 시작 부분에 대해 확인됩니다 — 즉, 특정 매처를 완전히 금지하려면 여섯 가지 모든 순서를 지정해야 하지만, 수식어도 금지할 수 있습니다. 기본적으로 이 맵은 비어있으며, 이는 어떤 매처나 수식어도 금지되지 않음을 의미합니다.

예시 설정:

json
{
  "jest/no-restricted-matchers": [
    "error",
    {
      "toBeFalsy": null,
      "resolves": "대신 `expect(await promise)`를 사용하세요.",
      "toHaveBeenCalledWith": null,
      "not.toHaveBeenCalledWith": null,
      "resolves.toHaveBeenCalledWith": null,
      "rejects.toHaveBeenCalledWith": null,
      "resolves.not.toHaveBeenCalledWith": null,
      "rejects.not.toHaveBeenCalledWith": null
    }
  ]
}

위 설정과 함께 잘못된 코드 예시:

javascript
it("는 거짓이다", () => {
  // 만약 이에 수식어가 있으면(예: `not.toBeFalsy`), 문제가 없음
  expect(a).toBeFalsy();
});

it("해결된다", async () => {
  // 이 수식어의 모든 사용은 허용되지 않음, 매처와 무관하게
  await expect(myPromise()).resolves.toBe(true);
});

describe("오류가 발생했을 때", () => {
  it("파일을 업로드하지 않는다", async () => {
    // 이 매처의 모든 사용은 허용되지 않음
    expect(uploadFileMock).not.toHaveBeenCalledWith("file.name");
  });
});

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

json
{
  "rules": {
    "vitest/no-restricted-matchers": "error"
  }
}

구성

이 규칙은 다음 속성을 가진 구성 객체를 수락합니다:

restrictedMatchers

type: Record<string, string>

기본값: {}

사용자 정의 메시지를 제공할 제한된 매처/수식어 목록입니다.
키는 매처/수식어 이름(예: "toBeFalsy", "resolves", "not.toHaveBeenCalledWith")입니다.
값은 매처/수식어가 사용될 때 표시할 선택적 사용자 정의 메시지입니다.

사용 방법

설정 파일이나 명령줄 인터페이스를 통해 이 규칙을 활성화하려면 다음을 사용하세요:

json
{
  "plugins": ["jest"],
  "rules": {
    "jest/no-restricted-matchers": "error"
  }
}
bash
oxlint --deny jest/no-restricted-matchers --jest-plugin

참고 자료