Concept:
- Define a type for the mock object
- Assign mock value in the provider
Let's say you have a NestJS service:
class TheServiceYouWantToTest { constructure( private readonly prisma: PrismaService // <- the Prisma service contains its client (models) ){} } To test TheServiceYouWantToTest, you might need to mock PrismaService.
This is the pattern in test code that I use for mock PrismaService:
type MockPrismaService = { model: { // define only the method I'll use in the implementation code findMany: jest.Mock ... } } describe('some sort of service', () => { let prisma: MockPrismaService beforeEach(() => { // create the test module with our service undertest and the mock service const mockPrismaService: MockPrismaService = { model: { findMany: jest.fn(), ... } } const module = await Test.createTestingModule({ providers: [ TheServiceYouWantToTest, { provide: PrismaService, useValue: mockPrismaService, } ], }) // get the mock object that is already binding with the test module // the object type will be MockPrismaService prisma = module.get(PrismaService) }) // and then we can ... // mock it prisma.model.findMany.mockResolvedValue(...) // spy it expect(prisma.model.findMany).toHaveBeenCalled() // without type error })
Top comments (0)