[1팀 이의찬] Chapter 3-2. 프런트엔드 테스트 코드#30
Open
Legitgoons wants to merge 13 commits intohanghae-plus:mainfrom
Open
Conversation
- 과도한 Mock 데이터 생성 문제 해결 - Mock Handler 역할별 분리 - UI 상태-테스트 쿼리 불일치 수정
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
8주차 과제 체크포인트
기본 과제
필수
선택
심화 과제
심화과제는 1팀 이의찬, 1팀 김휘린, 5팀 양성진 3명이서 함께 진행했습니다.
심화 과제 관련 내용은 5팀 양성진 PR에 함께 작성했습니다.
과제 셀프회고
기술적 성장
Testing Library와 현실적 타협점 찾기
우선 테스트를 작성하면서 처음에는 각각의 반복 인스턴스가 개별 이벤트로 생성될 것이라고 예상하고 테스트를 작성했습니다.
하지만 실제 구현에서는 반복 일정이 하나의 이벤트 객체로 관리되고 있었고, 이를 수정하기보다는 현재 구현에 맞춰 테스트를 조정하는 것이 더 현실적이라는 걸 배웠습니다.
"Found multiple elements" 해결하기
FormControlLabel과Checkbox가 둘 다 같은 라벨을 가지면서 MUI 컴포넌트들이 복잡한 DOM 구조를 만들면서 발생하는 "Found multiple elements" 에러가 발생해 Testing Library가 혼란스러워했습니다.이 과정에서 쿼리 우선순위를 체계화할 수 있었습니다.
getByRole+ 정규식getElementByIdgetByLabelText그리고 특정 DOM 요소 안에서만 검색 범위를 제한하는
within()로 스코프를 제한하는 방법도 학습할 수 있었습니다.이런 방법들을 통해서 반복 일정이나 여러 개의 동일한 컴포넌트가 있을 때 발생하는 "Found multiple elements" 에러를 해결했습니다.
TDD 경험
이번 과제의 핵심 중 하나가 테스트를 먼저 작성하고 이를 기반으로 개발하는 TDD를 체험해보는 것이었는데, 구현도 없는 상태에서 테스트부터 작성한다는 게 어색하게 느껴질 수 있지만 TDD는 AI 시대에 정말 유용한 개발 방법론이라고 생각합니다.
요구사항만 명확히 정리되어 있다면 이를 기반으로 "이런 테스트를 작성해줘"라고 요청하면 되니까 테스트를 작성하는 건 AI의 도움을 받기가 상대적으로 쉽고, 그리고 그 테스트를 기반으로 구현을 하는 것도 더 명확한 방향성을 가지기 때문입니다.
기본 과제 테스트 구현 전략
이번 기본 과제에서는 통합 테스트 위주로 테스트 코드를 작성했습니다.
결국 문제는 액션에서 생긴다라고 말했듯이 유닛 테스트만으로는 "진짜 잘 작동하나?"에 대한 확신을 얻기에 모자란 점이 많다고 생각하기에, 기능이 정상적으로 동작함을 증명할 수 있는 통합 테스트가 우선적으로 작성되는 게 더 낫다고 느꼈습니다.코드 품질
접근성 고려
data-testid를 제거하고 접근성 속성 기반으로 마이그레이션하는 과정에서, 테스트하기 쉬운 코드가 실제로 사용하기도 쉬운 코드라는 걸 체감했습니다.aria-label,role같은 속성들이 단순히 테스트를 위한 게 아니라 실제 사용자 경험 향상에 기여한다는 점이 인상적이었습니다.학습 효과 분석
도메인 로직의 복잡성 고려해서 테스트 작성하기
달력 관련 로직에서 31일 매월 반복, 윤년 2월 29일 처리 같은 것들이 단순해 보이지만 실제로는 정말 많은 예외 상황을 고려해야 합니다.
특히 이런 도메인 로직을 테스트할 때는 일반적인 케이스보다 예외 케이스가 더 중요할 수 있다는 걸 배웠습니다. 윤년이 4년에 한 번 오는 특수한 상황인데, 그런 상황에서의 사용자 경험이 실제로는 더 중요할 것 같습니다.
리뷰 받고 싶은 내용