Jest测试报错:TypeError: debug is not a function求解决
解决Jest测试中fetch-mock的"TypeError: debug is not a function"报错
问题分析
这个报错源于fetch-mock内部依赖的debug模块未被正确转译,或者你的transformIgnorePatterns配置存在路径匹配错误、规则冲突的问题。
解决方案
1. 修正transformIgnorePatterns配置
删除冗余规则,根据项目目录结构配置正确的白名单规则:
- 如果你的
jest.config.js位于子项目目录,上级目录有node_modules,使用以下配置:
const path = require('path'); module.exports = { // 其他配置... transformIgnorePatterns: [ // 排除上级node_modules中除fetch-mock外的所有包 `^${path.resolve(__dirname, '../node_modules')}/(?!fetch-mock)` ] };
- 如果是单项目结构(node_modules和jest.config.js同目录),简化为:
module.exports = { // 其他配置... transformIgnorePatterns: [ 'node_modules/(?!fetch-mock)' ] };
注意:正则中的负向预查要确保格式正确,避免多余的斜杠或括号导致匹配失败。
2. 确保Babel转译配置正确
检查你的Babel配置文件(.babelrc或babel.config.js),确保包含@babel/preset-env预设,以转译ES6+语法:
{ "presets": [ ["@babel/preset-env", { "targets": { "node": "current" } }] ] }
3. 清除Jest缓存
运行测试时添加--clearCache参数,清除旧缓存:
jest --clearCache
4. 调整fetch-mock版本
如果上述方法无效,尝试切换fetch-mock的版本:
- 降级到稳定版(如
v9.11.0):
npm install fetch-mock@9.11.0 --save-dev
- 或升级到最新兼容版本,查看其文档确认Jest支持情况。
5. 强制转译debug模块
若问题仍存在,将debug模块也加入转译白名单:
transformIgnorePatterns: [ `^${path.resolve(__dirname, '../node_modules')}/(?!fetch-mock|debug)` ]
内容的提问来源于stack exchange,提问作者YTG
相关产品推荐
相关产品推荐

