NEST UNIT TEST

Nest 단위 테스트 분기 검증

테스트가 중요하다는 설명만으로는 Nest 코드를 검증할 수 없다. TestingModule에서 provider를 구성하고, repository나 외부 API를 mock으로 대체하며, 성공·실패·예외 분기를 서비스 단위로 확인해야 한다.

대상 경계 controller, service, guard 중 하나를 테스트 단위로 고른다
대체 전략 repository, DB, 외부 API는 mock 또는 test DB로 분리한다
분기 증명 success, not found, validation, exception 경로를 빠짐없이 확인한다
01

대상 경계 선택

컨트롤러, 서비스, 가드 중 하나를 테스트 단위로 고르고 외부 의존성을 표시한다.

한 테스트가 너무 많은 계층을 지나지 않게 한다
02

TestingModule 구성

필요한 provider만 등록하고 DB, HTTP client, queue는 mock provider로 바꾼다.

실제 DB가 필요하면 통합 테스트다
03

Mock 동작 지정

repository.findOne 성공, null, throw 같은 분기를 테스트마다 명시한다.

mock 기본값에 기대지 않는다
04

결과와 호출 검증

반환값뿐 아니라 의존성 호출 인자, 예외 타입, 로그 또는 이벤트 발행을 확인한다.

호출 계약도 테스트 대상이다
05

테스트 격리

각 테스트 뒤 mock 상태를 초기화하고 공유 상태가 다음 케이스에 새지 않게 한다.

순서 의존 테스트는 위험하다
Unit
한 클래스 분기 의존성을 mock으로 바꾸고 서비스 로직을 빠르게 검증한다.
많이, 빠르게 돌린다
Integration
모듈과 DB 연결 실제 repository나 테스트 DB로 여러 provider 조합을 확인한다.
속도와 격리를 관리한다
E2E
HTTP 경계 앱을 띄우고 요청부터 응답까지 라우팅, pipe, guard, interceptor를 함께 본다.
핵심 흐름 위주로 둔다
Mock
외부 의존 대체 실패와 지연을 인위적으로 만들어 예외 흐름을 확인한다.
mock이 실제 계약과 너무 멀어지지 않게 한다

테스트 확인

실패 분기 없는 데이터, 권한 실패, 의존성 예외를 각각 테스트하는지 확인한다.
Provider 대체 실제 DB나 외부 API가 단위 테스트에서 호출되지 않는지 본다.
호출 인자 repository나 client가 기대한 조건으로 호출되는지 검증한다.