Jest自定义测试环境无法识别绝对导入路径该如何解决?
问题根因
你配置的moduleNameMapper与tsconfig路径映射仅对Jest执行的测试用例代码生效,自定义测试环境的加载时机早于Jest模块解析规则、ts-jest转译逻辑的生效时间,因此绝对路径无法被识别。
解决方案
方案1:使用tsconfig-paths处理路径映射(推荐)
无需修改现有配置,新增依赖注册路径映射规则即可:
- 安装依赖
npm install --save-dev tsconfig-paths
- 修改
testEnvironment.ts,在文件最顶部注册路径规则
// 首行添加,自动读取tsconfig中的路径配置 require('tsconfig-paths/register'); const NodeEnvironment = require('jest-environment-node'); import config from 'src/config'; // 剩余原有代码保持不变
如果自动注册不生效,可以手动指定参数适配你的目录结构:
const path = require('path'); require('tsconfig-paths').register({ // 指向你的项目根目录 baseUrl: path.resolve(__dirname, '../..'), paths: { "src/*": ["src/*"] } });
方案2:预编译自定义测试环境
不想引入额外依赖可以选择提前转译测试环境文件:
- 修改tsconfig的
exclude规则,排除对测试环境文件的过滤,执行tsc命令编译得到testEnvironment.js - 修改jest.config.js的
testEnvironment配置,指向编译后的js文件路径即可
module.exports = { testEnvironment: './build/testUtils/testEnvironment.js', // 其余配置保持不变 }
该方案需要每次修改测试环境代码后重新编译,适合测试环境不常变动的场景。
内容的提问来源于stack exchange,提问作者kbanner
相关产品推荐
相关产品推荐

