프로젝트의 스택사항
react native
typescript
apollo client
지난 몇년간 프론트에서의 테스트에 대한 발표가 쏟아져 나왔고 핫한 주제였다.
그 당시엔 막 개발을 배우는 단계였기 때문에 아직 때가 아니라고 생각해서 넘어 갔었다.
하지만, 이제 때가 왔다.
테스트를 왜 작성해하는지에 대한 이유는 정말 많다.
테스트를 하는 궁극적인 이유는 요구되는 사항에 맞춰 프로덕트가 정확하게 동작할까? 이다.
그렇다면, 프론트에서의 요구되는 사항에 맞춰 프로덕트가 정확하게 동작이 무엇인지 안다면 무엇을 테스트할지도 보일것 같다.
프론트의 동작은 일반적으로 밑의 그림과 같은 순서를 가지므로
유저가 화면과 인터렉션 했을때, 기대하는 view가 나오는가? 가 우리가 테스트할 무엇 이다.
어떻게 유저가 화면을 누르는 input을 가상으로 넣고
output으로 view가 제대로 나오는지를 테스트 할수 있을까?
이 사항들을 완벽하게 e2e로 테스트 하기에는 쉽지 않다.
그래서 자료들을 찾아본 결과 기능적,시각적 테스트로 나누면 한층 편하게 테스트 할 수 있을것 같았고 그렇게 시도하였다.
기능적 테스트: 프론트의 동작 2,3번 커버
시각적 테스트: 프론트의 동작 4번 커버
구조는 하단의 구조를 가지며 view와 logic의 분리를 하였다.
프론트에서 생기는 기능 로직은 대부분
이다. 그리고 이 작업들은 대부분 각 컴포넌트의 커스텀 hook에 적도록 한다면
react-hooks-testing-library을 이용해서 hook만 테스트 해도 대부분의 기능이 커버될것이다.
리스트페이지를 테스트 한다고 했을때의 예시를 간단히 들어보자면
아래 그림과 같이 hook을 작성
테스트시에는 input에 여러 케이스의 mock server data를 넣은 onQueryComplete를 실행시키고 expect에는 그에 대응되는 mock client data가 나오는지 테스트했다.
시각적 테스트의 경우 여러 방법들이 있다.
jest의 snapshot 테스트는 이전의 html의 구조를 저장해두고 diff를 비교해놓는 방식이다.
이 방식으로 테스트 코드가 통과가 되면,
제대로 그려졌는지에 대해서 증명할수 있을까?
정답은 아니오 이다.
왜냐하면, 같은 html구조를 가지더라도 style에 따라서 다른방식으로 그려질수가 있다.
storybook을 이용해서 아까 기능적 테스트에서 만들어뒀던 mock client data를 주입해서 page의 여러상황에 대한 view를 나열한다.
이후 storybook snapshot 같은 시각적 회귀 테스트 도구를 통해 이미지 비교 테스트를 진행하자.
시각적 회귀테스트에 대해서는 아직 시도해보지 않아서.. 링크로 대체한다.
시각적 회귀 테스트글 링크
장점
단점
후기