RSS DEV 社区 关注 在 NestJS 中使用 Jest 模拟 Prisma 当测试依赖于 PrismaService 的 NestJS 服务时,通常需要模拟 PrismaService。一种常见的模式是为 mock PrismaService 定义一个特定的类型。这个 mock 类型应该只包含被测试服务实际使用的那些方法。例如,如果服务使用了 prisma.model.findMany,那么 mock 类型就会将 findMany 定义为 jest.Mock。在测试的 beforeEach 块中,你会创建这个 mock 类型的一个实例,并用 jest.fn() 初始化其方法。然后,使用 useValue 将这个 mock 实例提供给 NestJS 测试模块。Test.createTestingModule 函数用于设置测试环境,包括被测试的服务和被模拟的依赖。在模块创建完成后,你可以从模块中检索到 mock PrismaService 实例。检索到的对象将具有定义的 mock 类型,从而实现类型安全的模拟和断言。然后,你可以使用 Jest 的功能,通过 mockResolvedValue 来模拟 mock 方法的返回值。此外,你还可以使用 expect 和 toHaveBeenCalled 来断言这些 mock 方法是否按预期被调用。这种方法确保了只模拟 PrismaService 的必要部分,使测试更具针对性和可预测性。 Mock Prisma with Jest in NestJS dev.to
prisma.model.findMany,那么 mock 类型就会将findMany定义为jest.Mock。在测试的beforeEach块中,你会创建这个 mock 类型的一个实例,并用jest.fn()初始化其方法。然后,使用useValue将这个 mock 实例提供给 NestJS 测试模块。Test.createTestingModule函数用于设置测试环境,包括被测试的服务和被模拟的依赖。在模块创建完成后,你可以从模块中检索到 mock PrismaService 实例。检索到的对象将具有定义的 mock 类型,从而实现类型安全的模拟和断言。然后,你可以使用 Jest 的功能,通过mockResolvedValue来模拟 mock 方法的返回值。此外,你还可以使用expect和toHaveBeenCalled来断言这些 mock 方法是否按预期被调用。这种方法确保了只模拟 PrismaService 的必要部分,使测试更具针对性和可预测性。