구체적으로 어떤 부분을 테스트할 수 있는가?
기초: 인풋 필드와 버튼이 화면에 제대로 보이는가?
- 유효성 검사
- 올바른 값을 입력했을 때 오류 메시지가 NO_ERROR(’’)로 초기화 되는가?
- 잘못된 값을 입력했을 때 오류 메시지가 올바르게 갱신되는가?
- 폼이 제출되거나, 필드가 터치된 경우에만 메시지가 표시되는가?
- 폼 제출
- 유효성 검사에 실패했을 때, antd의 메시지가 올바르게 표시되는가?
- 폼이 제출되고 유효성 검사를 통과했을 때, submitData에 올바른 값이 들어있는가?
- formData로 변환 후
- ‘data’ 필드에 올바른 데이터가 들어있는가?
- ‘files’ 필드에 올바른 파일 데이터가 들어있는가?
빈 데이터는 없는가? 각 필드의 타입은 올바른가?
- 세션 스토리지 저장
- 입력이 발생하면 1초 후 세션 스토리지에 올바르게 저장되는가?
- 사용자가 모달에서 아니오를 누르거나, 수정 페이지에 진입하거나,
전시회 정보가 이미 존재하는 경우, 세션 스토리지기 자동으로 비워지는가?
- 전시회 검색바
- 검색 시 올바른 데이터를 배열로 가져오는가?
- 잘못된 값을 입력 시, antd의 message가 보이는가?
- API 테스트
프론트에서 할 수 있는 것이 맞는지? mock API 등을 사용하는 방법이 있는지 확인
- 각 입력 필드는 화면에 렌더링되어야 한다. o
- 입력 시 값이 올바르게 반영되어야 한다. o
- 잘못된 값을 입력 시, 오류 메시지가 보여야 한다. (유효성 검사)
- 유효성 검사에 미통과한 상태에서 폼을 제출 시, 오류 메시지가 보여야 한다.
- 유효성 검사에 통과한 상태에서 폼을 제출 시, 데이터가 올바르게 제출되어야 한다. (API 모킹 예정)
테스트 종류, 도구
- 유닛 테스트(컴포넌트 테스트), integrate 테스트, E2E 테스트
- 도구: React Testing Library, testing-library/user-event, Jest
Jest를 사용하면 단위 테스트를 할 수 있고,
react-testing-library와 함께 사용하면 통합 테스트까지 할 수 있다.
Behavior Driven Test(행위 주도 테스트) 방법론이 대세다.
vs Implementation Driven Test(구현 주도 테스트)
사용자가 애플리케이션을 이용하는 관점에서 사용자의 실제 경험 위주로 테스트를 작성
개발 의존성으로 설치할 것!
참고 자료
★★
★
Next.js에서 테스트 환경 설정
getByRole 참고자료
설정이 약간 복잡하고 신경써야할 게 있다. 오류 발생
이슈
SWC를 사용했더니 babel보다 훨씬 빠르다.
jest 및 react-testing-library가 인식 불가
- 가능: react-hook, custom-hook, Emotion, useRouter, useTheme
- 불가능: useLocation
※ useTheme은 themeProvider로 컴포넌트를 감싸는 것으로 해결됨
window.matchmedia 타입 에러
API 연동은 따로 처리해야한다. API를 mocking해서 처리해야 해
ExhibitionSearchBar와 ReviewCreatePage는 따로 처리해야할 수도...
규칙
테스트 파일은 컴포넌트 폴더 내부에 두기.
별도의 폴더를 만들지 않고 사용할 것.
yarn test ReviewEditForm/