❗️문제 상황
- 발생한 문제
- PR 생성 시 마다 Github Action의 CI Action에서 약 160개 테스트와 500개의 테스트 케이스가 매 번 실행되어 완료까지의 과도한 소요 시간이 발생
- 목표
- CI Action 시 테스트 시간 단축을 통한 생산성 향상
시도한 해결 방법들
❎ 1차 시도: Jest 내장 옵션 --onlyChanged 활용 (실패)
npm test --onlyChanged
결과: PR 환경에서 "No tests found related to files changed since last commit" 에러 발생
에러 원인:
- --onlyChanged 옵션은 마지막 커밋 이후의 변경사항만 감지
- PR 환경에서는 모든 변경사항이 이미 커밋되어 있어 Jest가 변경된 파일을 찾지 못함
- Git working directory에 staged되지 않은 변경사항이 없으면 테스트 대상이 없다고 판단
❎ 2차 시도: --shard 활용 (실패)
jest --shard=1/2
jest --shard=2/2
결과: 테스트 케이스 간 의존성 문제로 인한 타임아웃 발생
실패 원인:
- --shard 옵션을 이용해 테스트케이스 병렬 실행 시 테스트 케이스간에 의존성 문제로 인해 테스트가 서로 영향을 주어 타임아웃이 계속 발생
- 타임아웃 문제를 해결하려면 테스트 케이스 간 의존성 제거 및 실행 순서 조정 등 번거로운 작업이 필요
- 이러한 번거로움 때문에 --shard 옵션은 패스 !
✅ 채택한 해결책 (--findRelatedTests, --passWithNoTests 옵션 사용)
- name: Test Changed Files
run: |
BASE_BRANCH="origin/${{ github.event.pull_request.base.ref || 'main' }}"
CHANGED_FILES=$(git diff $BASE_BRANCH --name-only)
if [ -n "$CHANGED_FILES" ]; then
echo "📝 변경된 파일 목록:"
echo "$CHANGED_FILES" | nl -w2 -s'. '
npm test --silent -- --findRelatedTests $CHANGED_FILES --passWithNoTests
else
echo "변경된 파일이 없어 테스트를 진행하지 않습니다."
fi
적용 사항
- fetch-depth: 0 설정으로 전체 Git 히스토리 확보 (base 브랜치 감지 시 Git 히스토리가 필요함.)
- 조건부 실행 적용
- 변경된 파일이 있을 땐 목록을 출력 후 테스트 진행
- 변경된 파일이 없을 때 테스트 미진행 멘트 출력 후 테스트 패스
- 동적 base 브랜치 감지를 통한 다양한 브랜치 환경 대응
** 적용 완료 시 결과 이미지

✅ 결과
- 약 160개 테스트와 500개의 테스트 케이스 중 실제 변경된 파일과 관련된 테스트만 실행
- CI Action 시 빌드 시간 단축
- 소규모 기능 개발건 기준 : 약 9분 -> 약 4분으
- 빠른 피드백으로 개발 생산성 향상
** --findRelatedTests, --passWithNoTests 옵션의 안정적인 사용을 위한 Jest 버전 권장사항
- 최소 요구사항: Jest 22 이상 (--findRelatedTests 기본 지원)
- 권장 버전: Jest 27.4.7 이상
** 참고 : https://jestjs.io/docs/cli
'이것 저것' 카테고리의 다른 글
Figma MCP를 이용해서 사이드 프로젝트 디자인, 퍼블리싱 해보기 (feat. Readdy ai) (0) | 2025.05.19 |
---|