NestJS项目Jest单元测试中自定义命名导出模块找不到求助
解决NestJS Jest测试中找不到@decorators等自定义模块的问题
问题根源
- 模块映射规则不匹配:当前Jest配置里的
moduleNameMapper仅匹配带子路径的导入(如@decorators/some-file),但实际代码中用的是import ... from '@decorators'直接导入模块根目录,正则规则未覆盖这种场景。 - 路径映射错误:更新后的package.json配置中,
@entities的映射缺少@前缀,和实际导入的@entities不对应;同时@decorators的映射逻辑未兼容根目录导入的情况。
修复方案
方案1:修正根目录jest.config.js
module.exports = { moduleFileExtensions: ['js', 'json', 'ts'], rootDir: '.', testEnvironment: 'node', transform: { '^.+\\.(t|j)s$': 'ts-jest', }, moduleNameMapper: { // 匹配不带子路径的@decorators根导入 '^@decorators$': 'src/utils/decorators', // 匹配带子路径的@decorators/xxx导入 '^@decorators/(.*)$': 'src/utils/decorators/$1', // 同理处理@entities的两种导入场景 '^@entities$': 'src/entities', '^@entities/(.*)$': 'src/entities/$1', }, };
方案2:修正package.json中的jest配置
"jest": { "moduleNameMapper": { "^src/(.*)$": "<rootDir>/$1", // 覆盖@decorators的根导入和子路径导入 "^@decorators$": "<rootDir>/utils/decorators", "^@decorators/(.*)$": "<rootDir>/utils/decorators/$1", // 修正@entities的映射规则,添加@前缀 "^@entities$": "<rootDir>/entities", "^@entities/(.*)$": "<rootDir>/entities/$1" }, "moduleFileExtensions": [ "js", "json", "ts" ], "rootDir": "src", "testRegex": ".*\\.spec\\.ts$", "transform": { "^.+\\.(t|j)s$": "ts-jest" }, "collectCoverageFrom": [ "**/*.(t|j)s" ], "coverageDirectory": "../coverage", "testEnvironment": "node" }
额外必查项
- 确认
src/utils/decorators和src/entities目录下存在index.ts文件,且已导出所有需要的成员,例如:// src/utils/decorators/index.ts export { IntColumnOptional, StringColumnOptional } from './column-decorators'; - 确保TypeScript配置(tsconfig.json)中的
paths和Jest映射规则一致,TS编译时的路径映射是项目运行正常的原因,但Jest需要单独配置:{ "compilerOptions": { "paths": { "@decorators": ["src/utils/decorators"], "@decorators/*": ["src/utils/decorators/*"], "@entities": ["src/entities"], "@entities/*": ["src/entities/*"] } } }
内容的提问来源于stack exchange,提问作者testidvic
相关产品推荐
相关产品推荐

