[5팀 김유현] Chapter 3-2. 프런트엔드 테스트 코드#10
Open
yuhyeon99 wants to merge 30 commits intohanghae-plus:mainfrom
Open
Conversation
일정 반복 생성 기능(매일, 매주, 매월, 매년)을 추가했습니다. - 월별/연간 반복 시 31일, 윤년 등 특수 날짜 처리 로직을 구현했습니다. - 반복 일정들은 일괄적으로 생성되어 API에 전송됩니다.
- Vitest 실행 중 발생하는 "EMFILE: too many open files" 오류를 해결하기 위해 @mui/icons-material 라이브러리를 모의(mock) 처리합니다. - medium.integration.spec.tsx 테스트 스위트에서 DOM 요소 쿼리에 대한 null 검사를 추가하여 타입 안정성을 개선합니다.
This reverts commit 601d45c.
- MUI 아이콘 import 방식을 named → 개별 default 경로로 변경
- 반복 일정 생성 시, 종료일이 지정되지 않은 경우 기본값으로 '2025-06-30'이 설정되어야 한다는 요구사항을 반영하는 테스트 케이스를 추가합니다.
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주차 과제 체크포인트
기본 과제
필수
선택
심화 과제
각 팀원들의 테스트 전략은?
합의된 테스트 전략과 그 이유는 무엇인가요?
합의된 테스트 전략: 테스트 트로피(Trophy Strategy)선택 이유팀에서 테스트 트로피 전략을 선택한 주요 이유들:
1. 애플리케이션 특성에 적합
캘린더 애플리케이션은 일정 생성, 수정, 삭제와 같은 사용자 중심의 기능 플로우가 핵심
복잡한 비즈니스 로직보다는 사용자 시나리오의 원활한 동작이 더 중요
2. 요구사항 변경에 대한 대응력
새로운 일정 추가, 변경, 반복 설정, 삭제 등 요구사항이 지속적으로 변경되는 환경
통합 테스트는 개별 컴포넌트의 변경보다는 전체적인 사용자 플로우의 안정성을 보장
3. 테스트 신뢰성 확보
단위 테스트만으로는 컴포넌트 간 상호작용에서 발생할 수 있는 문제를 놓칠 수 있음
통합 테스트 중심으로 실제 사용자가 경험하는 시나리오를 검증하여 더 높은 신뢰성 확보
테스트 트로피 전략의 구성
통합 테스트 (Integration Tests): 최대 비중 - 사용자 플로우 중심의 E2E 수준 테스트
단위 테스트 (Unit Tests): 중간 비중 - 핵심 로직에 대한 최소한의 테스트
E2E 테스트: 최소 비중 - 주요 사용자 시나리오에 대한 종단간 테스트
추가로 작성된 테스트 코드는 어떤 것들이 있나요?
한아름님 PR에 테스트 코드 작성하였습니다.(별도로 제 PR에서도 구현했습니다.)
#33
1. 종료일을 지정하지 않았을 때 반복 시작일이 10월 30일 이후이면 시작 날짜에 대한 일정 하나만 생성 (hooks)
작성 이유:
경계값 테스트의 중요성: 10월 30일이라는 특정 날짜 기준의 비즈니스 로직을 검증
예외 상황 처리: 반복 일정 생성 시 발생할 수 있는 특수한 케이스 대응
데이터 무결성 보장: 잘못된 반복 일정 생성으로 인한 데이터 오류 방지
2. 반복 생성된 일정들과 이미 존재하는 일정이 겹칠 때 경고 표시 (integration)
작성 이유:
사용자 경험(UX) 개선: 일정 충돌 상황을 사용자에게 명확히 알려 혼란 방지
실제 사용 시나리오 검증: 반복 일정과 기존 일정 간의 상호작용을 통합적으로 테스트
비즈니스 로직 검증: 일정 충돌 감지 및 경고 시스템의 정확한 동작 확인
3. 반복 일정을 추가할 때 반복 유형이 선택되지 않았을 경우 폼 유효성 검사 (integration)
작성 이유:
사용자 입력 검증: 필수 입력값 누락 시 적절한 피드백 제공
오류 방지: 불완전한 데이터로 인한 시스템 오류 사전 차단
사용자 가이드: 올바른 입력 방법을 사용자에게 안내하여 사용성 향상
과제 셀프회고
이번 주에는 여러 시행착오를 통해서 테스트 코드 그리고 MSW와 좀 더 친밀해졌다고 생각합니다.
기술적 성장
TDD 원칙 심화 학습
MSW(Mock Service Worker) 동적 활용
날짜/시간 처리의 복잡성 인지
코드 품질
특히 만족스러운 구현
saveSchedule헬퍼 함수 확장 →isRepeating,repeatType인자 추가로 테스트 코드 간결화.generateUUID함수 도입 및mockEvents배열 동적 관리 → 이벤트 CRUD 테스트의 실제성을 높임.리팩토링이 필요한 부분
act(() => vi.setSystemTime(...))+await screen.findByText(...)반복 패턴 → 헬퍼 함수로 추상화하여 가독성 개선 필요.학습 효과 분석
가장 큰 배움
추가 학습 필요 영역
실무 적용 가능성
과제 피드백
screen.debug(),screen.logTestingPlayground()리뷰 받고 싶은 내용
saveSchedule헬퍼 함수와 같이 테스트 코드 내에서 반복적으로 사용되는 로직을 추상화하고 재사용성을 높이는 더 좋은 방법이 있을까요?generateRecurringEvents함수에서 repeatEndDate가 없는 경우를 처리하는 현재 로직(과거 날짜일 경우 단일 이벤트만 생성) 외에 "무기한 반복"을 더 명확하고 유연하게 처리할 수 있는 설계 패턴이 있을까요?