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 的必要部分,使测试更具针对性和可预测性。