NestJS 서비스가 PrismaService에 의존하는 경우, PrismaService를 모킹하는 것이 종종 필요합니다. 일반적인 패턴은 모킹된 PrismaService에 대한 특정 타입을 정의하는 것입니다. 이 모킹 타입은 테스트 중인 서비스가 실제로 사용하는 메서드만 포함해야 합니다. 예를 들어, 서비스가 prisma.model.findMany를 사용한다면, 모킹 타입은 findMany를 jest.Mock으로 정의합니다. 테스트의 beforeEach 블록에서 이 모킹 타입의 인스턴스를 생성하고, 해당 메서드를 jest.fn()으로 초기화합니다. 이 모킹 인스턴스는 useValue를 사용하여 NestJS 테스트 모듈에 제공됩니다. Test.createTestingModule 함수는 테스트 대상 서비스와 모킹된 의존성을 포함하여 테스트 환경을 설정하는 데 사용됩니다. 모듈이 생성된 후, 모킹된 PrismaService 인스턴스를 모듈에서 가져옵니다. 이 가져온 객체는 정의된 모킹 타입을 가지므로 타입 안전한 모킹 및 어설션을 수행할 수 있습니다. 그런 다음 Jest의 기능을 사용하여 mockResolvedValue를 통해 모킹된 메서드의 반환 값을 모킹할 수 있습니다. 또한 expect와 toHaveBeenCalled을 사용하여 이러한 모킹된 메서드가 예상대로 호출되었는지 어설션할 수 있습니다. 이 접근 방식은 PrismaService의 필요한 부분만 모킹하여 테스트를 집중적이고 예측 가능하게 유지합니다.
prisma.model.findMany를 사용한다면, 모킹 타입은findMany를jest.Mock으로 정의합니다. 테스트의beforeEach블록에서 이 모킹 타입의 인스턴스를 생성하고, 해당 메서드를jest.fn()으로 초기화합니다. 이 모킹 인스턴스는useValue를 사용하여 NestJS 테스트 모듈에 제공됩니다.Test.createTestingModule함수는 테스트 대상 서비스와 모킹된 의존성을 포함하여 테스트 환경을 설정하는 데 사용됩니다. 모듈이 생성된 후, 모킹된 PrismaService 인스턴스를 모듈에서 가져옵니다. 이 가져온 객체는 정의된 모킹 타입을 가지므로 타입 안전한 모킹 및 어설션을 수행할 수 있습니다. 그런 다음 Jest의 기능을 사용하여mockResolvedValue를 통해 모킹된 메서드의 반환 값을 모킹할 수 있습니다. 또한expect와toHaveBeenCalled을 사용하여 이러한 모킹된 메서드가 예상대로 호출되었는지 어설션할 수 있습니다. 이 접근 방식은 PrismaService의 필요한 부분만 모킹하여 테스트를 집중적이고 예측 가능하게 유지합니다.