React项目Jest预检查无法通过,寻求排查方案
npm ls jest结果 & 排查yarn test阻塞问题 先解读你得到的npm ls jest输出
这个结果说明你的项目处于create-react-app的标准状态:没有全局安装Jest,也没有在项目的dependencies/devDependencies里直接声明Jest依赖,完全依赖react-scripts内置的Jest版本来运行测试。这种依赖方式本身是正常的,但阻塞问题大概率出在Jest的运行环境、缓存、或者react-scripts的版本兼容性上。
下一步排查步骤
彻底清理缓存与依赖
缓存堆积是这类阻塞问题的常见诱因,按顺序执行以下命令:# 清除yarn全局缓存 yarn cache clean # 删除项目依赖和锁文件 rm -rf node_modules yarn.lock package-lock.json # 重新安装依赖 yarn install # 清除Jest自身的缓存 yarn test --clearCache完成后再尝试运行
yarn test,看是否恢复正常。检查并升级react-scripts版本
老版本的react-scripts可能存在Jest启动阻塞的已知bug,先查看当前版本:npm ls react-scripts如果版本低于5.x(当前稳定版),建议升级到最新稳定版:
yarn upgrade react-scripts@latest升级完成后重新安装依赖再测试。
简化测试用例排查问题根源
哪怕是默认测试用例,也可能因为DOM环境异常卡住。临时把App.test.js替换成最极简的测试:test('basic sanity check', () => { expect(true).toBe(true); });如果简化后测试能正常运行,说明原默认测试的组件渲染环节有问题;如果还是阻塞,那问题出在Jest的启动流程上。
切换npm对比测试
有时候yarn的版本或配置会和react-scripts不兼容,试试用npm运行测试:npm test如果npm能正常运行,那说明是yarn的问题,可尝试升级yarn到最新稳定版:
yarn set version stable开启调试日志定位阻塞点
用 verbose 模式或调试日志输出更多信息:# 关闭watch模式,强制单次运行并输出详细日志 yarn test --watchAll=false --verbose # 输出Jest全流程调试日志,找到卡住的具体环节 DEBUG=jest* yarn test查看日志里卡住前的最后一条输出,就能定位是初始化、渲染还是其他环节出了问题。
检查系统资源与端口占用
Jest的watch模式可能占用端口或消耗大量资源导致阻塞,先关闭其他高资源占用程序,然后运行:yarn test --watchAll=false强制关闭自动监听,仅运行一次测试,看是否能完成。
内容的提问来源于stack exchange,提问作者Jason FB

