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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 20:47:34