NestJS 테스트와 CI

CI 테스트 통합: 필수 검사와 산출물 점검

CI에 테스트를 넣는 목적은 실행 버튼을 줄이는 데 있지 않습니다. 실패가 어디서 났는지 빠르게 보고, 불안정한 테스트를 품질 신호와 분리해야 합니다.

trigger PR / release required checks unit / e2e / coverage artifact report + cache hit PR evidence 실패 위치 flaky retry는 별도 신호
01

작업 흐름 trigger와 필수 검사

pull_request, push, release job을 나누고 unit, e2e, coverage 필수 검사가 merge 전에 끝나게 합니다.

PR 통과 기준
02

Dependency cache와 test reporter

GitHub Actions cache key는 lockfile과 Node 버전을 포함하고 Jest/JUnit report와 coverage artifact를 업로드합니다.

산출물
03

CI 환경과 병렬 실행 충돌

로컬 통과 테스트도 env secret, timezone, DB port, parallel job 충돌로 흔들릴 수 있으니 실패 로그를 job별로 나눕니다.

병렬 충돌
04

CI artifact와 재실행 근거

test report, coverage html, failure screenshot/log, cache hit 여부를 artifact로 남겨 같은 commit에서 재현합니다.

재현 증거
책임
CI는 PR마다 unit, e2e, coverage 필수 검사를 분리한다 GitHub branch protection이 어떤 job을 막는지 보이게 하고 optional job과 release job을 섞지 않습니다.
PR
경계
cache key와 artifact 이름은 실행 환경을 포함해야 한다 Node 버전, lockfile hash, OS를 cache key에 넣고 test report와 coverage artifact를 job 이름으로 구분합니다.
cache
CI 신호
flaky retry는 실패를 숨기지 말고 별도 신호로 남긴다 재시도 후 통과한 spec, timeout, 환경 변수 누락을 annotations나 artifact에 남겨 다음 PR에서 추적합니다.
retry

CI 필수 검사와 테스트 산출물 검증 지점

필수 점검 unit, e2e, coverage job이 required check로 분리되고 실패 report가 PR에서 바로 열리는지 확인합니다.
CI flake 원인 cache key 오염, env secret 누락, parallel DB 충돌을 따로 보지 않으면 로컬 통과 테스트가 CI에서 흔들립니다.
Test artifact Jest/JUnit report, coverage html, cache hit 로그, failure artifact를 commit SHA 기준으로 남깁니다.

CI artifact 점검

질문: CI가 unit/e2e/coverage 필수 검사와 실패 산출물를 PR에서 바로 드러내는가
순서: workflow trigger 설정 -> cache key 고정 -> Jest/JUnit report와 coverage artifact 업로드
위험: lockfile 없는 cache key나 공유 DB를 쓰면 병렬 job이 서로의 결과를 오염시킵니다.