- 하나의 논리 단위만 테스트
- 훅/함수 하나, 컴포넌트 하나.
- 외부 모듈은 jest.mock 으로 격리.
- Arrange-Act-Assert 패턴 고수
- Arrange: 테스트 환경·데이터 준비
- Act: 동작 수행
- Assert: 결과 검증
- 무엇을 "검증"하는지 이름에 드러내기
- should open modal when … 같이 자연어로.
- 불필요한 구현 세부 검사 금지
- “setState가 몇 번 호출됐다”보다 "화면에 xxx가 보인다" 혹은 "API가 호출된다" 처럼 행동 위주.
- 하나의 테스트엔 하나의 시나리오
- 여러 시나리오 섞으면 실패 원인 추적이 어렵다.
- clearAllMocks / resetModules 로 상태 초기화
- 테스트끼리 부작용이 없게.
- 실패 메시지 가독성 확보
- expect(result).toEqual(expected) 보단
expect(fn).toThrowError(/권한/) 처럼 의미 있는 매처 사용.
- expect(result).toEqual(expected) 보단
테스트 종류 및 특징
단위 테스트 | • 한 함수/훅/컴포넌트 단독 외부 의존성은 100% 목(mock) / 스텁• DOM 렌더링이 아예 없거나 최소 |
renderHook() 으로 훅 한 개만 실행 후 내부 로직 검증 |
통합 테스트 | • 여러 컴포넌트·훅·모듈을 함께 실행• 브라우저 DOM(가상 JS-DOM) 렌더링 있음• 네트워크는 대개 가짜 서버(MSW) 로 스텁 |
render(<MainLayout/>) → 버튼 클릭 → 모달 뜨는지 확인 |
E2E(UI) 테스트 | • 실제 브라우저 자동화 (Cypress·Playwright) 네트워크는 실제 서버 or e2e-stub 라우팅·스토리지·스타일까지 전부 검증 |
사용자가 로그인 → 로그아웃 → /login 으로 리다이렉트 |
단위는 renderHook(), 통합은 render + user-event 로 “사용자 행동”을 재현.