本地Jest测试遇enzyme_1未定义错误,CI正常求排查方案
本地Jest+Enzyme测试报错排查思路
针对本地执行yarn jest出现ReferenceError: enzyme_1 is not defined或Cannot access 'enzyme_1' before initialization,但CI环境正常的问题,可按以下方向排查:
1. 核对TypeScript模块配置与Jest解析逻辑
- 检查
setupTests.ts的Enzyme导入方式:如果用的是默认导入import Enzyme from 'enzyme',尝试改为命名导入import * as Enzyme from 'enzyme';反之也可互换测试。 - 查看
tsconfig.json的compilerOptions:确保module配置(比如CommonJS)与Jest的模块解析逻辑匹配,同时可尝试开启allowSyntheticDefaultImports: true,兼容ES模块与CommonJS模块的导入差异。
2. 验证Jest配置与依赖版本一致性
- 对比本地与CI环境的Jest版本:执行
yarn list jest查看本地版本,确认和CI环境完全一致,版本差异可能导致模块加载逻辑不同。 - 检查
jest.config.js的setupFilesAfterEnv配置:确认setupTests.ts的路径正确,且没有其他前置加载的配置文件提前引用了Enzyme。
3. 确认Enzyme适配器与React版本兼容性
- 检查
enzyme-adapter-react-xx版本是否与项目React版本匹配(比如React 16对应adapter-react-16,React 17需用@wojtekmaj/enzyme-adapter-react-17),版本不兼容会导致编译后变量异常。 - 重新安装Enzyme及适配器:执行
yarn remove enzyme enzyme-adapter-react-xx && yarn add -D enzyme enzyme-adapter-react-xx(替换xx为对应版本),清理可能的依赖损坏。
4. 排查Node版本带来的模块加载差异
- Node 10到12对ES模块的处理逻辑有变化,若项目混用CommonJS与ES模块,易出现变量初始化顺序问题。可在
jest.config.js中添加transformIgnorePatterns,确保Enzyme相关依赖被正确转译:transformIgnorePatterns: [ '/node_modules/(?!(enzyme|enzyme-adapter-react-xx)/)' ]
5. 清理Jest自身缓存与编译残留
- 执行
yarn jest --clearCache清理Jest的测试缓存,避免旧的编译文件干扰。 - 检查
tsconfig.json的outDir配置,确认其路径未与Jest的roots/testMatch路径重叠,防止Jest加载未编译的TS文件或旧JS产物。
内容的提问来源于stack exchange,提问作者josemigallas
相关产品推荐
相关产品推荐

