解决 jest 不支持别名alias

发表于:2020-04-20

在开发项目中我们经常会看到下面写法

// src/index.jsx
import App from '@/App' 

等价于

import App from 'src/App' 

如果我们在写单元测试时候引入了别名模块会抛出错误

● Test suite failed to run

Cannot find module '@/App' from 'index.js'

解决办法

jest.config.js 配置 moduleNameMapper 字段进行别名应映射

// jest.config.js
module.exports = {
  // ...
  moduleNameMapper: {
    "@/(.*)$": "<rootDir>/src/$1",
  }
};

简单介绍下上面字面意思, 这里的key是一个正则表达式, 找到 @/ 开头 (.*) 圆括号捕获匹配,$ 结束。 value 是一个映射路径, <rootDir> 指向jest根目录, $1 是正则捕获的值。

修改完后记得重新执行测试命令, 我就是执行了 jest --watchAll 调试了老半天~

JavaScript