Jest配置:transformIgnorePatterns移入jest.config.js后失效求助
解决Jest配置中transformIgnorePatterns移入jest.config.js失效的问题
问题原因
Create React App(CRA)默认不会读取项目根目录自定义的jest.config.js文件,它有一套内置的Jest配置逻辑,你的自定义配置会被直接忽略——这就是为什么在npm run test脚本里加参数有效,但移入配置文件就失效的核心原因。另外也可能存在正则表达式写法、transform规则覆盖的细节问题。
解决方案
方案1:用react-app-rewired扩展CRA配置(无需eject,推荐)
这是不破坏CRA封装的非侵入式方案:
- 安装依赖:
npm install react-app-rewired --save-dev
- 在项目根目录新建
config-overrides.js文件,写入以下内容:
module.exports = function override(config, env) { if (env === 'test') { // 替换为你的transformIgnorePatterns规则 config.transformIgnorePatterns = ['node_modules/(?!d3-shape/)']; // 确保ts-jest能处理d3-shape的JS文件 config.transform['^.+\\.jsx?$'] = 'ts-jest'; } return config; };
- 修改
package.json中的test脚本:
"test": "react-app-rewired test --env=jsdom"
方案2:Eject项目(不可逆)
如果不需要保留CRA的封装,可以选择eject:
- 执行eject命令:
npm run eject
- 项目根目录会生成
config文件夹,找到其中的jest.config.js(或package.json的jest字段),直接修改transformIgnorePatterns:
transformIgnorePatterns: ['node_modules/(?!d3-shape/)']
方案3:排查正则与transform配置细节
如果以上方案无效,检查以下两点:
- 正则写法:脚本中的
"node_modules/(?!d3-shape)/"在配置文件中可简化为'node_modules/(?!d3-shape/)',无需包裹绝对路径斜杠(CRA内部用相对路径匹配) - transform规则覆盖:确保你的transform配置包含d3-shape的文件类型(比如JS):
transform: { '^.+\\.(ts|tsx|js|jsx)$': 'ts-jest', }
内容的提问来源于stack exchange,提问作者hhpr98
相关产品推荐
相关产品推荐

