Angular项目ng test执行时Karma出现60秒无消息断开问题求助
Angular 16 Karma Chrome Headless 断开连接问题解决方案
问题重现
执行ng test时出现Chrome Headless超时断开错误:
Chrome Headless 120.0.6099.130 (Windows 10) ERROR Disconnected , because no message in 60000 ms. Chrome Headless 120.0.6099.130 (Windows 10): Executed 404 of 134 (24 FAILED) (skipped 4) DISCONNECTED (5 mins 32.639 secs / 8.279 secs)
已尝试调整Karma超时配置、Chrome启动参数、升级Angular 16到最新版本,但问题仍存在。
有效解决方案
1. 修复Karma配置中的拼写错误
你的karma.conf.js存在参数拼写错误,导致超时配置未生效:
- 错误:
browseDisconnectTimeOut: 40000 - 正确:
browserDisconnectTimeout: 40000
修正后该参数才能正常作用,避免Karma误判连接断开。
2. 优化Chrome Headless启动参数
启用被注释的关键参数,并添加内存扩容参数,防止Chrome因资源不足崩溃:
customLaunchers: { ChromeHeadlessNoSandbox: { base: 'ChromeHeadless', flags: [ '--no-sandbox', '--disable-gpu', '--disable-background-timer-throttling', '--disable-renderer-backgrounding', '--disable-device-discovery-notifications', '--max_old_space_size=4096' // 增加内存分配,避免内存溢出 ] } }
这些参数会阻止Chrome在后台被系统节流,同时提升可用内存,减少断开概率。
3. 排查并修复失败/慢测试
日志显示有24个失败测试,且测试计数异常(Executed 404 of 134),大概率是异步测试未正确收尾导致的:
- 检查所有失败测试,确认异步逻辑是否正确调用
done()或返回Promise/Observable - 用
ng test --verbose模式查看单测耗时,找出执行时间过长的测试,拆分或优化这些测试 - 临时注释失败测试,验证是否还会断开,定位是否由特定测试引发
4. 调整Karma超时参数到合理值
修正拼写后,进一步调大超时阈值,给慢测试足够执行时间:
captureTimeout: 600000, // 10分钟 browserDisconnectTimeout: 60000, // 60秒 browserDisconnectTolerance: 4, browserNoActivityTimeout: 120000 // 2分钟
5. 临时禁用SonarQube Reporter排查
SonarQube报告生成可能阻塞测试进程,导致超时:
- 从
reporters数组中移除sonarqube,重新运行测试 - 如果问题消失,说明是该插件与当前版本不兼容,尝试升级
karma-sonarqube-reporter到最新版本,或调整其配置
6. 拆分测试套件分批次运行
如果测试数量较多,一次性运行所有测试容易导致资源耗尽:
- 使用
--include参数指定目录/文件分批次执行,比如:ng test --include="src/app/**/*component.spec.ts" ng test --include="src/app/**/*service.spec.ts" - 或在
karma.conf.js中配置files字段,拆分测试执行范围
内容的提问来源于stack exchange,提问作者Jekyll and Hyde
相关产品推荐
相关产品推荐

