Prisma findMany调用是否正确?运行时错误排查求助
Prisma findMany 查询报错及 Mock 配置问题解决
问题1:查询条件字段名不匹配
你的Schema模型里定义的关联字段是projectID,但findMany的where条件里错误使用了project: projectID,字段名不对应直接导致Prisma无法识别查询条件,触发调用错误。
修正后的findMany代码:
let dataArr: any[] = []; try { timeseries = await prisma.derivedTimeSeries.findMany({ where: { projectID: projectID, // 与Schema字段名保持一致 }, select: { date: true, viewCount: true, uniqueViewCount: true, dwellTime: true, } }); for(let i = 0; i < timeseries.length; i++) { let dataObject = { timestamp: timeseries[i].date, views: timeseries[i].viewCount, uniqueViews: timeseries[i].uniqueViewCount, dwellTime: timeseries[i].dwellTime, } dataArr.push(dataObject); } } catch (err) { // 建议添加错误捕获逻辑 console.error(err); }
问题2:Mock 方法与实际调用不匹配
你实际业务代码调用的是findMany,但mock配置里仅给findUniqueOrThrow设置了返回值,完全未处理findMany的mock逻辑,导致测试时findMany返回空数组或触发未mock的错误。
修正后的createMockTimeseries函数:
const createMockTimeseries = (prismaMock: any, projectID: number, viewCount: number) => { const mockTimeseries: Timeseries = { id: 1, projectIDToDate: '1.12/7/2022', projectID: projectID, date: new Date(), viewCount: viewCount, uniqueViewCount: 0, dwellTime: 0, }; // 给实际调用的findMany配置mock返回值 prismaMock.derivedTimeSeries.findMany.mockResolvedValueOnce([mockTimeseries]); }; export { createMockProjectOverview, createMockTimeseries };
问题3:Prisma 模型名大小写不一致
Prisma生成的客户端中,模型名采用驼峰式小写开头(如derivedTimeSeries),但你mock代码里写的是DerivedTimeSeries,大小写不匹配会导致mock无法生效,必须保持和实际调用的模型名完全一致。
额外提示
- 利用TypeScript的类型提示可以提前发现字段名不匹配的问题,避免运行时报错。
- 测试时需确保每个实际调用的Prisma方法都配置了对应的mock返回值,否则会出现未预期的空数组或报错。
内容的提问来源于stack exchange,提问作者macman926
相关产品推荐
相关产品推荐

