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

Jest运行TypeORM测试报错TypeError: this.subQuery is not a function如何解决

报错原因

该TypeError: this.subQuery is not a function错误核心原因是你测试代码中传入的TestModel实体类,没有和TypeORM连接注册的实体类匹配上,具体触发点来自你的环境变量实体配置冲突:
你在.env.test的TYPEORM_ENTITIES中同时配置了dist/models/**/*.js(编译后的JS版本实体)和源码TS版本实体路径,而Jest跑TS测试时用ts-jest直接执行TS源码,你测试代码里导入的是src目录下的TS版本TestModel,但TypeORM优先加载了dist目录下编译后的JS版本TestModel,两个不是同一个类引用,导致TypeORM无法识别你传入的实体,触发方法调用错误。

修复方案
  • 优先修正.env.test的实体路径配置,测试环境移除dist目录的JS实体加载,只保留TS实体路径:
TYPEORM_ENTITIES=src/models/**/*.ts,modules/**/entity/*.ts
  • 若上述修改不生效,建议在创建连接时显式传入实体列表,完全规避路径加载匹配问题,修改测试文件的beforeAll逻辑:
// 顶部先导入你用到的所有实体
import TestModel from '../src/models/test.model'
import OtherModel from '你对应的OtherModel路径'

// beforeAll里改createConnection的配置
beforeAll(async () => { 
  connection = await createConnection({
    type: 'sqlite',
    database: ':memory:',
    synchronize: true,
    logging: false,
    entities: [TestModel, OtherModel],
    migrations: [require('../dist/services/db/seeding.js')],
    migrationsRun: true
  }); 
});
  • 额外检查点:确认测试文件中TestModel的导入路径正确,没有路径别名配置错误导致导入了重复的实体类;确认jest配置中没有错误的moduleNameMapper规则导致TypeORM被多次加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:57:05