피드로 돌아가기
Mock What Prisma Returns, Not What Your API Returns
Dev.toDev.to
Backend

개발자가 NestJS 서비스 테스트에서 Prisma Mock에 API 응답 형태를 반환하도록 설정하여 TypeError 발생

Mock What Prisma Returns, Not What Your API Returns

Rhico2026년 3월 30일5intermediate

Context

NestJS 서비스 유닛 테스트에서 Prisma ORM을 mocking할 때, 개발자가 실제 Prisma가 반환하는 데이터 형태가 아닌 프론트엔드가 보는 API 응답 형태를 Mock에 설정하는 실수가 발생한다. Prisma의 findMany는 항상 평범한 배열을 반환하며, { data, meta } 형태의 래핑은 TransformInterceptor라는 별도 계층에서 수행된다.

Technical Solution

  • Prisma Mock → findMany 호출 시 { data: [...], nextCursor: '...' } 객체 대신 [mockOrg] 형태의 배열 반환
  • TransformInterceptor → 응답에 data와 meta 키가 없으면 { data: response }로 자동 래핑하는 로직 구현
  • Pagination 테스트 → page1과 page2 ID 목록을 Set으로 변환 후 some() 메서드로 중복 항목 존재 여부 검증
  • Membership 테스트 → beforeAll로 사용자 역할(owner, admin, member)별로 테스트 데이터 선별적 구성

Impact

테스트 실행 시 TypeError: result.at is not a function 오류 해소

Key Takeaway

Mock은 대체하는 레이어가 반환하는 형태를 정확히 반영해야 하며, 다른 계층의 응답 구조를 임의로 적용하면 테스트가 실제 로직과 무관한 오류를 발생시킨다.


NestJS + Prisma 환경에서 서비스 유닛 테스트 작성 시 Prisma Mock에 mockResolvedValue([mockOrg]) 형식으로 배열 전달하여 result.at(-1) 메서드 정상 작동 보장

원문 읽기