Jest默认不支持绝对路径别名,需配置moduleDirectories添加"src"或用moduleNameMapper映射@等别名,并确保rootDir准确,否则模块解析失败。

Jest 默认不支持像 Webpack 或 Vite 那样的绝对路径别名(如 src/components/Button),直接写 import Button from 'src/components/Button' 会报 Cannot find module 'src/components/Button'。根本原因是 Jest 的模块解析器没被告知从哪里开始查找这些路径。
配置 moduleDirectories 让 Jest 知道“src”是根目录
这是最常用也最直接的解法。Jest 通过 moduleDirectories 指定模块查找的起始目录列表,默认只有 node_modules。你只需把 src 加进去,Jest 就会把 src/components/Button 当作相对于 src/ 的路径来解析。
- 在
jest.config.js或package.json的jest字段中添加:
"moduleDirectories": ["node_modules", "src"]
- 之后,所有绝对路径导入都要去掉开头的
src/,改用src下的相对路径写法:
import Button from 'components/Button'; // ✅ 正确:Jest 会在 src 目录下找 components/Button
import Button from 'src/components/Button'; // ❌ 错误:Jest 不会自动补 src/ 前缀
用 moduleNameMapper 映射自定义别名(如 @、~)
如果你项目里用了 Webpack 的 @ 别名(import Button from '@/components/Button'),Jest 不认识这个符号,必须显式告诉它怎么映射。
- 在 Jest 配置中添加正则映射:
"moduleNameMapper": { "^@/(.*)$": "
-
<rootdir></rootdir>是 Jest 内置变量,代表项目根目录(即package.json所在位置) - 确保你的构建工具(如 Webpack/Vite)和 Jest 使用相同的别名规则,否则开发和测试行为不一致
检查 rootDir 是否准确
如果项目结构较深(比如 Jest 配置文件不在项目根目录),或你在 monorepo 中运行测试,rootDir 推断可能出错,导致 <rootdir>/src</rootdir> 实际指向错误位置。
- 显式声明
rootDir可避免歧义:
"rootDir": "./"
- 这个值必须是 Jest 配置文件所在目录的相对路径,通常填
"./"即可 - 它会影响
moduleNameMapper、setupFiles等所有含相对路径的配置项
验证是否生效的小技巧
改完配置后不要急着跑测试,先快速验证路径是否被正确识别:
- 在任意测试文件中临时加一行:
console.log(require.resolve('components/Button')); - 如果输出一个真实存在的文件路径(如
/your/project/src/components/Button.js),说明解析成功 - 如果仍报错,重点检查
moduleDirectories拼写、rootDir位置、以及导入路径是否多写了src/


















