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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:45:34