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
相关产品推荐
相关产品推荐

