문제1: RTL은 simulated된 jsdom을 사용해 Node.js 환경에서 렌더링하기 때문에 getBoundingClientRect
는 제대로 된 값을 반환하지 않는다.
해결1: getComputedStyle
을 사용할 수 있다.
문제2: getComputedStyle
은 계산된 CSS를 반환하지 실제 렌더되는 값과는 차이가 있을 수 있고, jsdom으로 인해 PointerEvent 발생 시 제대로 된 값을 사용할 수 없었다.
해결2:
@storybook/addon-interactions
애드온현재 프로젝트에 테스트를 적용하면서 확실히 강의를 들을 때와는 다르다는 걸 느끼고 있었다. 특히, 쉬울 줄 알고 시작했던 캐러셀 요소 테스팅이 생각보다 까다롭다고 느꼈는데, 시각적 요소를 포함하고 있기 때문이다. 예를 들어, 캐러셀은 슬라이더가 움직이면서 이미 렌더링 되어 있는 카드 컴포넌트들 중 일부를 보여주는 형식으로 구현되어 있는데, DOM에는 이미 모든 카드가 렌더링되어 있기 때문에 실제로 화면에 원하는 요소만 보이는지는 테스트하기가 까다로웠다.
이 글을 읽으면서 유닛 테스트를 위해 Jest, Vitest와 RTL만 생각해볼 것이 아니라, 시각적 요소를 포함한 테스트는 E2E나 StoryBook의 도입을 고려해봐야겠다는 생각을 했다.