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

tsconfig paths与jest.config配置冲突致测试运行失败求助

TypeScript路径别名搭配Jest时无法定位@testUtils模块的问题解决

我想在项目中使用tsconfig的paths路径别名功能,但和Jest搭配时遇到了模块无法定位的问题。已经按照常规配置设置了tsconfig.json和jest.config.ts,但运行测试时始终提示@testUtils模块找不到,相关信息如下:

tsconfig.json配置

{
  "compilerOptions": {
    "target": "es2017",
    "module": "commonjs",
    "lib": [
      "dom",
      "es6",
      "es2017",
      "esnext.asynciterable"
    ],
    "skipLibCheck": true,
    "sourceMap": true,
    "outDir": "./dist",
    "moduleResolution": "node",
    "removeComments": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "noImplicitThis": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "resolveJsonModule": true,
    "baseUrl": "./src",
    "paths" : {
      "@testUtils": ["./entities/tests/utils", "./testUtils"],
      "@testUtils/*": ["./entities/tests/utils/*", "./testUtils/*"]
    },
    "typeRoots": [
      "./src/custom_typings",
      "./node_modules/@types"
    ]
  },
  "exclude": [
    "node_modules"
  ],
  "include": [
    "src/**/*.ts"
  ]
}

jest.config.ts配置

/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
import { JestConfigWithTsJest, pathsToModuleNameMapper } from "ts-jest";
import { compilerOptions } from "./tsconfig.json";

const jestConfig: JestConfigWithTsJest = {
  preset: "ts-jest",
  testEnvironment: "node",
  testPathIgnorePatterns: ["dist/", "node_modules/"],

  // 启用tsconfig-paths与jest配合
  modulePaths: [compilerOptions.baseUrl],
  moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths),
};

export default jestConfig

测试运行错误信息

● Test suite failed to run

    Configuration error:
    
    Could not locate module @testUtils mapped as:
    [
      "./entities/tests/utils",
      "./testUtils"
    ].
    
    Please check your configuration for these entries:
    {
      "moduleNameMapper": {
        "/^@testUtils$/": "[
          "./entities/tests/utils",
          "./testUtils"
        ]"
      },
      "resolver": undefined
    }

项目文件夹结构

src/
├─ entities/tests/utils/
├─ testUtils/
tsconfig.json
jest.config.ts

解决方案

问题核心在于Jest的moduleNameMapper不支持数组形式的多路径映射,而你在tsconfig中给@testUtils配置了两个备选路径,导致pathsToModuleNameMapper生成的映射规则无法被Jest正确解析。

步骤1:调整路径映射配置

先简化tsconfig的paths,确保单路径映射可用:

"paths" : {
  "@testUtils": ["./testUtils"],
  "@testUtils/*": ["./testUtils/*"]
}

如果确实需要保留两个路径,可后续通过代码层面的条件导入处理,或使用第三方解析器补充多路径支持。

步骤2:修复Jest的路径解析根目录

给pathsToModuleNameMapper添加prefix: '<rootDir>/'参数,并将modulePaths改为绝对路径,确保Jest基于项目根目录正确解析:

import path from 'path';
import { JestConfigWithTsJest, pathsToModuleNameMapper } from "ts-jest";
import { compilerOptions } from "./tsconfig.json";

const jestConfig: JestConfigWithTsJest = {
  preset: "ts-jest",
  testEnvironment: "node",
  testPathIgnorePatterns: ["dist/", "node_modules/"],

  modulePaths: [path.resolve(__dirname, compilerOptions.baseUrl)],
  moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, { prefix: '<rootDir>/' }),
};

export default jestConfig

步骤3:验证目标目录的文件结构

确保src/testUtils/(或你指定的路径)下存在index.ts或对应导入的文件名,Jest需要找到具体入口文件才能完成模块解析。

步骤4:清除Jest缓存

执行以下命令清除缓存,避免旧配置残留:

jest --clearCache

完成以上步骤后重新运行测试,问题即可解决。

内容的提问来源于stack exchange,提问作者sev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:51:00