ts-jest配置路径映射后无法定位@app前缀模块的报错如何解决?
问题原因
你遇到的路径映射失效核心原因是调用pathsToModuleNameMapper时未配置路径前缀参数:
pathsToModuleNameMapper不会自动读取tsconfig的baseUrl配置,默认生成的映射为相对路径,jest解析相对路径时会以执行导入的文件所在目录为基准,而非项目根目录。- 你在
database/database.ts中导入@app/env.local.json时,jest会根据生成的./$1映射规则,去database/./env.local.json路径下查找文件,而该文件实际在项目根目录,因此抛出找不到模块的错误。
解决方案
修改jest.config.js配置,补充pathsToModuleNameMapper的前缀参数以及必填的基础配置即可:
const { pathsToModuleNameMapper } = require("ts-jest/utils") const { compilerOptions } = require("./tsconfig.json") module.exports = { preset: 'ts-jest', testEnvironment: 'node', rootDir: '.', moduleFileExtensions: ['ts', 'js', 'json'], moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, { // 路径前缀绑定项目根目录,和tsconfig的baseUrl对应 prefix: '<rootDir>/' }) }
修改后@app/*会被映射为<rootDir>/*,也就是项目根目录下的对应文件,即可正确识别@app/env.local.json。
ReferenceError关联说明
该报错完全和路径映射错误相关:路径导入失败触发jest测试流程提前终止,环境被销毁后,后续未执行完成的模块导入逻辑还在运行,就会抛出这个提示。路径映射问题修复后,该报错会自动消失。
内容的提问来源于stack exchange,提问作者lsc
相关产品推荐
相关产品推荐

