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

NestJS项目Jest单元测试中自定义命名导出模块找不到求助

解决NestJS Jest测试中找不到@decorators等自定义模块的问题

问题根源

  1. 模块映射规则不匹配:当前Jest配置里的moduleNameMapper仅匹配带子路径的导入(如@decorators/some-file),但实际代码中用的是import ... from '@decorators'直接导入模块根目录,正则规则未覆盖这种场景。
  2. 路径映射错误:更新后的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:53:17