Typescript + React + React Testing Library + Jest 환경 구성 및 몇가지 간단한 테스트 코드 예시

Explanation

오늘은 제목 처럼 react-testing-library를 이용한 간단한 테스트 환경과 몇가지 예시?를 적어보려 합니다!
(대략 오늘의 프로젝트 구성은, typescript, react, webpack, jest, react-testing-library 입니다.)

늘 그렇듯 포스팅에 사용된 코드는 깃헙에서 확인하실 수 있습니다.
https://github.com/falsy/blog-post-example/tree/master/react-testing-library

1. 패키지 설치

순서가 좀 멋대로긴 한데.. 우선 우리 바벨 친구들 먼저 설치해줄게요.

다음으로 리액트를 설치해주고

타입스크립트와 웹팩도 설치해주고

이렇게 하나하나 적다보니, 분명히 전에는 package.json의 디펜던시 부분 그냥 복.붙.했었는데 오늘은 왜 이렇게 적고 있는 걸까요.
(이상함을 느꼈지만 이미 시작했으니…)

이어서 웹팩에서 사용할 플러그인과 로더를 설치해 줄게요.

이제 거의 다 왔습니다! 끝으로 jest와 react-testing-library를 설치해줄게요

2. 패키지 설정

패키지 설정들은 아주아주 간단하게 보편적으로(아마도?)

타입스크립트 설정

웹팩 설정

3. 테스트 코드 작성

4. 간단한 샘플 프로젝트

5. 테스트 커맨드 추가 및 테스트

하면 끝!

일 줄 알았지만,

jest-environment-jsdom 가 필요하다고 하네요! 당장 설치!

다시 실행

하면 끝!

일 줄 알았지만(2),

오류 메시지의 링크를 타고 가서 보면, 파일 상단에 주석을 넣으면 된다고 하네요!
https://jestjs.io/docs/configuration#testenvironment-string

다시 실행

하면 성공!

 

이라고 하기엔.. 글의 정보가 너무 누가 칼들고 협박해서 어쩔 수 없이 급하게 쓴 글 같으니..

몇가지 상황을 조금 적어볼게요!

6. 즉각적으로 변하지 않아서 조금 기다려야 하는 경우

만약에 위처럼 이벤트가 바로 반영되지 않는 경우 테스트가 실패하게 되는데요. 이럴때는

이렇게 waitFor를 사용하면 변화를 기다렸다가 평가해준답니다.

변화를 무조건 기다리는 건 아니고 기본 타임아웃은 1000ms 라고 하네요!
(참고)
https://testing-library.com/docs/dom-testing-library/api-async/

7. useContext를 사용한 커스텀 훅 테스트하기

짜잔! 이렇게 renderHook 과 act 를 사용하면 useContext를 사용한 커스텀 훅을 테스트 할 수 있답니다.

(참고)
https://react-hooks-testing-library.com/usage/advanced-hooks

8. window 객체 속성 정의하기

음… 테스트를 하다보면 window 객체의 특정 값이 필요할 때가 있는데요, 예를 들어 innerHeight 값이 필요하다면!

9. 이벤트 테스트 하기

간단하게 터치 이벤트를 만들어서 테스트 해볼게요.