React Jest测试在CI/CD中随机偶现Cannot read property 'body' of null错误
CI/CD流水线随机偶现测试失败问题
问题现象
- 本地执行所有测试均成功,但在CI/CD流水线中随机出现不同测试用例失败
- 所有失败用例统一报错:
TypeError: Cannot read property 'body' of null - 错误栈指向的文件,与当前失败的测试用例无直接或间接引用关系
错误详情
所有失败测试汇总 2022-11-16T09:54:22.7643575Z FAIL src/components/__tests__/SearchDishResultDetail.spec.tsx (5.037 s) 2022-11-16T09:54:22.7644466Z ● SearchDishResultDetail› 渲染正常 2022-11-16T09:54:22.7644747Z 2022-11-16T09:54:22.7645262Z TypeError: Cannot read property 'body' of null 2022-11-16T09:54:22.7645517Z 2022-11-16T09:54:22.7645835Z 263 | !isUserVerified(UserDetails) 2022-11-16T09:54:22.7646556Z > 264 | ) { 2022-11-16T09:54:22.7646866Z | ^ 2022-11-16T09:54:22.7647168Z 265 | return; 2022-11-16T09:54:22.7647468Z 266 | } 2022-11-16T09:54:22.7647869Z 267 | const preferredAddressList = UserDetails.address.map( 2022-11-16T09:54:22.7648150Z 2022-11-16T09:54:22.7648743Z at getActiveElement (node_modules/react-dom/cjs/react-dom.development.js:6651:16) 2022-11-16T09:54:22.7649477Z at getActiveElementDeep (node_modules/react-dom/cjs/react-dom.development.js:6939:17) 2022-11-16T09:54:22.7650226Z at getSelectionInformation (node_modules/react-dom/cjs/react-dom.development.js:6972:21) 2022-11-16T09:54:22.7651136Z at prepareForCommit (node_modules/react-dom/cjs/react-dom.development.js:7463:26) 2022-11-16T09:54:22.7651860Z at commitRootImpl (node_modules/react-dom/cjs/react-dom.development.js:22474:5) 2022-11-16T09:54:22.7656503Z at unstable_runWithPriority (node_modules/scheduler/cjs/scheduler.development.js:653:12) 2022-11-16T09:54:22.7657351Z at runWithPriority$1 (node_modules/react-dom/cjs/react-dom.development.js:11039:10) 2022-11-16T09:54:22.7658084Z at commitRoot (node_modules/react-dom/cjs/react-dom.development.js:22381:3) 2022-11-16T09:54:22.7928369Z at finishSyncRender (node_modules/react-dom/cjs/react-dom.development.js:21807:3) 2022-11-16T09:54:22.7929476Z at performSyncWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:21793:7) 2022-11-16T09:54:22.7930268Z at node_modules/react-dom/cjs/react-dom.development.js:11089:24 2022-11-16T09:54:22.7930898Z at unstable_runWithPriority (node_modules/scheduler/cjs/scheduler.development.js:653:12) 2022-11-16T09:54:22.7931715Z at runWithPriority$1 (node_modules/react-dom/cjs/react-dom.development.js:11039:10) 2022-11-16T09:54:22.7932554Z at flushSyncCallbackQueueImpl (node_modules/react-dom/cjs/react-dom.development.js:11084:7) 2022-11-16T09:54:22.7933379Z at flushSyncCallbackQueue (node_modules/react-dom/cjs/react-dom.development.js:11072:3) 2022-11-16T09:54:22.7934418Z at scheduleUpdateOnFiber (node_modules/react-dom/cjs/react-dom.development.js:21199:9) 2022-11-16T09:54:22.7935218Z at dispatchAction (node_modules/react-dom/cjs/react-dom.development.js:15660:5) 2022-11-16T09:54:22.7935899Z at Timeout._onTimeout (src/components/UserProfile/UserProfile.tsx:264:7)
排查方向建议
- 检查CI环境的jsdom配置:该错误多因jsdom模拟DOM时
document.body为null导致,可能是CI环境中测试执行时DOM初始化不完整 - 测试隔离问题:排查不同测试用例间是否存在未清理的副作用(比如全局定时器、残留DOM元素),导致随机触发非当前测试的代码逻辑
- 依赖版本一致性:确认本地与CI环境的react-dom、scheduler等依赖版本完全一致,避免版本差异引发的DOM处理逻辑冲突
- 异步代码处理:检查
UserProfile.tsx第264行的定时器逻辑,确保测试中对异步操作有正确的等待或清理机制
内容的提问来源于stack exchange,提问作者kd_24
相关产品推荐
相关产品推荐

