NestJS CI 테스트

unit과 e2e를 분리해 불안정 원인을 남기는 흐름

테스트 통합은 npm test 한 줄로 끝나지 않는다. 빠른 단위 테스트, 실제 의존성이 필요한 e2e, 커버리지 게이트, 실패 산출물 보존을 분리해야 재현 가능하다.

01

의존성 설치

lockfile 기준으로 설치하고 캐시는 lockfile hash에 묶어 오염을 막는다.

재현성 우선
02

Unit 단계

provider와 guard를 mock으로 격리해 빠르게 실패 위치를 좁힌다.

병렬 실행 가능
03

E2E 단계

테스트 DB나 container를 띄우고 migration, seed, cleanup을 파이프라인에 포함한다.

환경을 코드화
04

승인 기준 결정

coverage, lint, e2e 실패, flaky 재시도 초과를 배포 차단 조건으로 기록한다.

무시 기준 명시
Mock
외부 의존성 제거 메일, 결제, 외부 API는 계약만 검증하고 네트워크 호출은 막는다.
속도와 안정성
DB
트랜잭션과 스키마 검증 테스트마다 독립 데이터로 시작하고 migration drift를 잡는다.
공유 DB 금지
Flaky
불안정 테스트 격리 재시도는 원인 숨김이 아니라 별도 표식과 이슈 생성으로 이어져야 한다.
무한 재시도 금지
Report
실패 재현 자료 JUnit, coverage, app log, container log를 보존해 로컬 재현 시간을 줄인다.
산출물 필수

환경 변수 · 병렬성 · 차단 기준 점검

환경 변수 테스트용 secret과 production secret이 섞이지 않도록 prefix와 권한을 분리한다.
병렬성 동시 실행 시 포트, DB schema, queue 이름 충돌이 없는지 확인한다.
차단 기준 커버리지 하락, e2e 실패, migration 실패 중 무엇이 merge를 막는지 명확히 한다.

CI 단계 예시

install -> lint -> unit -> e2e(db) -> 커버리지 통과 기준
on failure: upload reports and service logs