React编译正常但Jest测试时报TypeError: Cannot read property 'forEach' of undefined
报错原因分析
该TypeError: Cannot read property 'forEach' of undefined报错核心触发逻辑为:Jest测试环境下你调用forEach方法的目标变量为undefined,而React开发/生产运行时该变量有上层逻辑保证不为空,因此不会触发报错。
常见触发场景如下:
- 单测时未给组件传入必填的数组类型props,该props在正常业务流程中由上层组件保证必传
- 单测中模拟的接口返回值、全局状态缺失对应的数组字段,代码未做空值兜底直接调用
forEach - Jest的jsdom模拟环境未兼容部分浏览器默认存在的全局变量,导致变量取值为
undefined
修复方案
- 优先给数组调用处增加空值兜底,将代码改为
(targetArray || []).forEach(...),该改动兼容所有运行场景,不会引入业务副作用 - 检查单测用例的组件传参:若报错的数组来自组件props,单测挂载组件时必须传入符合格式的mock数组,示例:
mount(<YourComponent dataList={[{id: 1, content: '测试数据'}]} />) - 检查异步逻辑的mock返回:若数组来自接口请求,确认mock返回的结果中包含对应的数组字段,不要漏写属性
- 若为全局变量缺失问题,可在Jest初始化配置文件(通常为jest.setup.js)中补全全局变量默认值,示例:
global.businessConfigList = global.businessConfigList || []
内容的提问来源于stack exchange,提问作者Raven Dorado
相关产品推荐
相关产品推荐

