Cypress UI模式运行脚本失败 升级版本时触发npm安装报错
问题汇总
- 运行态差异问题:测试脚本在headless(无头)模式下可正常执行,通过Cypress UI启动运行时直接失败,抛出Node.js内部错误,错误堆栈如下:
From Node.js Internals:Error: socket hang up at connResetException (node:internal/errors:690:15) at Socket.socketOnEnd (node:_http_client:471:24) at Socket.emit (node:events:406:36) at endReadableNT (node:internal/streams/readable:1331:13) at processTicksAndRejections (node:internal/process/task_queues:83:22)
- 版本升级报错:尝试将Cypress从9.4.1升级至10.1.0修复上述运行问题时,安装流程失败,执行安装命令返回如下错误:
PS C:\Users\hshah\cypress> npm install --save-dev cypress@10.0.3 npm ERR! must provide string spec npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\hshah\AppData\Local\npm-cache_logs\2022-06-20T05_10_05_825Z-debug.log PS C:\Users\hshah\cypress>
当前无法定位问题产生的根本原因。
修复方案
针对Cypress UI模式socket hang up报错
该错误本质是Cypress UI启动的本地代理服务与测试浏览器的通信连接被意外中断,无头模式不需要加载UI层交互代理,因此不会触发该问题,按优先级排查修复:
- 拦截类软件干扰:本地防火墙、杀毒软件、全局网络代理工具会拦截Cypress使用的本地环回端口通信,将Cypress二进制运行目录、项目
node_modules下的cypress目录加入安全软件白名单,临时关闭全局代理后重试即可。 - Node版本不兼容:Cypress 9.x系列对Node.js 17+的OpenSSL、HTTP2实现存在已知兼容问题,UI模式下会触发连接重置,将Node.js切换至16.x LTS版本即可匹配Cypress 9.x的官方兼容要求。
- 配置项错误:检查旧版本
cypress.json中的baseUrl、proxyServer配置项,若存在非法格式的地址、错误的端口号,UI模式加载配置时会直接中断通信连接,修正配置后重启Cypress即可。
针对Cypress升级时must provide string spec报错
该报错为npm依赖解析逻辑异常,和Cypress包本身无关,按以下步骤处理:
- 执行
npm cache clean --force清理本地损坏的npm缓存 - 若当前npm版本低于8.3,执行
npm install -g npm@lts升级npm到长期支持版本 - 删除项目根目录下的
node_modules文件夹与package-lock.json文件 - 重新执行
npm install --save-dev cypress@10.0.3完成安装
注意:Cypress 10.x存在配置文件破坏性变更,安装完成后首次执行npx cypress open时会触发自动配置迁移流程,需确认将旧版cypress.json的配置迁移到新版cypress.config.js中,否则启动后会出现配置不兼容报错。
内容的提问来源于stack exchange,提问作者Heeren
相关产品推荐
相关产品推荐

