testing
React Testing Library 및 Vitest 기반 테스팅 모범 관례. 다음 상황에서 사용: (1) .test.tsx, .test.ts, .spec.tsx, .spec.ts 파일 작업 시, (2) 컴포넌트 테스트 작성 또는 리팩토링 시, (3) 'test', 'testing', 'vitest', 'RTL', 'getByRole', 'userEvent', 'waitFor', 'expect' 키워드 포함 작업 시, (4) 비동기 로직 또는 사용자 상호작용 테스트 작성 시
By dalestudy · 361 installs
npx skills add dalestudy/skills --skill testing
Source repository · Upstream listing
Testing Library
React Testing Library 기반 테스트 작성 모범 관례 및 안티패턴 회피 가이드.
핵심 원칙
Testing Library의 철학: 사용자가 사용하는 방식대로 테스트하라
1. 접근성 기반 쿼리 우선 실제 사용자가 요소를 찾는 방식 사용
2. 구현 세부사항 테스트 금지 컴포넌트 내부 상태/메서드 직접 접근 지양
3. 실제 사용자 행동 시뮬레이션 userEvent 사용, fireEvent 지양
4. 비동기 처리 명시적 대기 waitFor, findBy 활용
쿼리 우선순위
Testing Library는 다양한 쿼리를 제공하지만, 접근성과 사용자 경험을 반영하는 순서 로 사용해야 함.
권장 쿼리 순서 (높음 → 낮음)
1. getByRole (최우선) 스크린 리더가 인식하는 방식
2. getByLabelText 폼 요소 (label과 연결된 input)
3. getByPlaceholderText placeholder가 명확한 경우
4. getByText 텍스트 콘텐츠로 검색
5. getByDisplayValue 현재 입력된 값으로 검색 (폼 요소)
6. getByAltText 이미지 alt 속성
7. getByTitle title 속성 (tooltip 등)
8. getByTestId (최후 수단) 다른 방법이 불가능할 때만 사용
상세 가이드 : [references/query priority.md](references/query priority.md)
사용자 상호작용 테스트
userEvent 사용 (권장)
핵심 :
userEvent.setup() 호출 후 사용
모든 user 메서드는 await 필수
실제 브라우저 이벤트 순서 재현 (focus, keydown, keyup 등)
fireEvent 지양
상세 가이드 : [references/user events.md](references/user events.md)
비동기 처리
findBy 쿼리 (권장)
findBy = getBy + waitFor 조합 (자동으로 요소 나타날 때까지 대기)
waitFor 사용
안티패턴
상세 가이드 : [references/async patterns.md](references/async patterns.md)
자주 하는 실수
1. 구현 세부사항 테스트
2. container 쿼리 사용
3. 불필요한 waitFor
4. getBy + toBeInTheDocument() 제거
getBy 는 요소를 못 찾으면 throw하므로 toBeInTheDocument() 는 기술적으로 중복이다. 하지만 제거하지 마라 — 리팩토링 후 남은 쿼리가 아니라 의도적인 존재 검증임을 코드 독자에게 전달하는 역할을 한다.
단, 존재 검증이 아닌 다른 속성을 검증할 때는 toBeInTheDocument() 를 추가할 필요 없다:
전체 안티패턴 목록 : [references/common mistakes.md](references/common mistakes.md)
Vitest + MSW 설정
테스트 환경 설정이 필요한 경우 다음 템플릿 참조:
assets/vitest.config.ts Vitest 설정 (React 플러그인, 커버리지 포함)
assets/test setup.ts Vitest 글로벌 설정
assets/msw setup.ts MSW 핸들러 및 서버 설정