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

Jest使用路径映射时提示找不到模块该如何解决?

问题根因

测试运行时(Jest、Vitest等单测工具)默认不会读取项目里构建工具(Webpack、Vite、TSC)配置的路径映射规则,模块解析仅遵循Node.js默认的查找逻辑:先找node_modules依赖,再按相对路径匹配文件,完全识别不了@pages/这类自定义别名,因此抛出模块找不到的报错。

修复方案

根据项目使用的测试框架选对应配置即可:

  • 基于Jest的项目
    1. 在Jest配置文件(jest.config.js/jest.config.ts)中添加moduleNameMapper字段,手动声明别名和实际物理路径的映射关系:
    module.exports = {
      // 其余原有Jest配置
      moduleNameMapper: {
        "^@pages/(.*)$": "<rootDir>/src/pages/$1",
        // 其余自定义别名按相同规则追加即可,比如全局@别名
        "^@/(.*)$": "<rootDir>/src/$1"
      },
      // 确认tsx/ts后缀在解析列表中
      moduleFileExtensions: ["ts", "tsx", "js", "jsx"]
    }
    
    1. 如果路径别名已经统一配置在tsconfig.json的compilerOptions.paths中,可以直接用ts-jest提供的工具方法自动生成映射规则,不用重复手写:
    const { pathsToModuleNameMapper } = require("ts-jest");
    const tsConfig = require("./tsconfig.json");
    
    module.exports = {
      preset: "ts-jest",
      moduleNameMapper: pathsToModuleNameMapper(tsConfig.compilerOptions.paths, {
        prefix: "<rootDir>/"
      })
    }
    
  • 基于Vitest的项目
    Vitest默认会自动读取Vite配置中的resolve.alias规则,如果未生效直接在vite.config.ts中显式声明别名即可:
    import { defineConfig } from "vitest/config";
    import path from "path";
    
    export default defineConfig({
      resolve: {
        alias: {
          "@pages": path.resolve(__dirname, "src/pages"),
          "@": path.resolve(__dirname, "src")
        }
      },
      test: {
        // 其余测试配置
      }
    });
    
  • 配置生效注意事项
    改完配置后必须完全终止当前运行的测试进程,重新执行测试命令,热重载通常不会加载新的模块解析配置;同时核对映射的物理路径是否和项目实际目录结构一致,避免多写/漏写src这类层级目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:54:19