Objection.js与ts-jest中模型路径解析失败求助:ts-jest运行报错但tsc编译正常
解决ts-jest运行时无法解析关联映射模型路径的问题
我之前也踩过一模一样的坑——tsc编译后运行完全正常,但ts-jest跑测试就报could not resolve的错误,这本质是ts-jest和tsc/node处理模块解析的逻辑不一致导致的,给你几个亲测有效的解决办法:
1. 改用明确的相对导入+TypeScript扩展名
path.join(__dirname, 'MemberAssignment')在node运行时(tsc编译后)能自动找到对应的.js文件,但ts-jest在直接处理.ts文件时,可能无法自动补全扩展名,或者__dirname在jest环境下的指向和你预期的不一致。
直接把modelClass改成带.ts后缀的相对路径就行:
primaryAssignment: { relation: Model.HasOneRelation, modelClass: './MemberAssignment.ts', // 这里加上.ts后缀 join: { from: 'members.primary_member_assignment_id', to: 'member_assignments.id', }, }
2. 配置ts-jest的模块文件扩展名
打开你的jest.config.js(或jest.config.ts),确保moduleFileExtensions包含ts,让jest能正确识别TypeScript文件作为模块:
module.exports = { preset: 'ts-jest', testEnvironment: 'node', moduleFileExtensions: ['ts', 'js', 'json'], // 确保ts在列表里 // 其他已有配置... };
3. 适配TypeScript路径别名(如果有使用)
如果你的tsconfig.json里配置了路径别名(比如"@/*": ["src/*"]),需要在jest配置里同步配置moduleNameMapper,让jest能正确解析这些别名:
module.exports = { // ...其他配置 moduleNameMapper: { '^@/(.*)$': '<rootDir>/src/$1', // 对应tsconfig里的别名规则 }, };
为什么tsc正常但ts-jest报错?
简单说:
- tsc是把TypeScript编译成JavaScript后,由node.js执行,node会自动查找
.js/.json等扩展名的文件,__dirname指向的是编译后文件的目录; - ts-jest是直接在内存中编译并执行TypeScript,它的模块解析逻辑更严格,需要明确指定扩展名,且
__dirname的指向可能和源文件目录不一致。
内容的提问来源于stack exchange,提问作者abhishekbutola
相关产品推荐
相关产品推荐

