You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prisma 2搭配NestJS spec测试报错:PrismaService不存在实体属性

问题排查与解决方案

这个报错既不属于NestJS/Prisma/Jest的兼容性问题,也大概率不是业务模块的导入导出异常,核心原因是Jest测试环境下未正确配置PrismaService的依赖,或是Prisma生成的类型没有被测试环境正确识别,可按以下步骤排查解决:

1. 确认Prisma生成配置与PrismaService定义正确

  • 首先执行npx prisma generate,确保schema.prisma中generator client配置正确,生成的PrismaClient类型已同步到node_modules/@prisma/client下。
  • 确认自定义的PrismaService是继承了生成的PrismaClient,而非自定义的空类:
import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';

@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {
  async onModuleInit() {
    await this.$connect();
  }

  async onModuleDestroy() {
    await this.$disconnect();
  }
}

2. 检查测试模块的提供者配置

Nest CLI自动生成的默认测试用例,不会自动引入业务外的依赖,你需要手动在测试的TestingModule中注册PrismaService或其mock实例:

import { Test, TestingModule } from '@nestjs/testing';
import { UserService } from './user.service';
import { PrismaService } from '../prisma/prisma.service';

describe('UserService', () => {
  let service: UserService;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [
        UserService,
        // 直接引入真实PrismaService
        PrismaService,
        // 若需要mock隔离数据库,按下方写法配置即可,需覆盖所有用到的实体方法
        // {
        //   provide: PrismaService,
        //   useValue: {
        //     user: {
        //       findUnique: jest.fn().mockResolvedValue({ id: 1, username: 'test' }),
        //     }
        //   }
        // }
      ],
    }).compile();

    service = module.get<UserService>(UserService);
  });

  it('should be defined', () => {
    expect(service).toBeDefined();
  });
});

如果测试模块中未注册PrismaService,Jest会默认注入空的mock对象,自然找不到user、post这类实体属性。

3. 确认Jest的TS配置覆盖Prisma类型

检查根目录tsconfig.json与test/tsconfig.json的compilerOptions.include配置,确保包含PrismaService所在目录,且@prisma/client的类型能被正确识别。


内容的提问来源于stack exchange,提问作者Jordan Renaud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:45:06