Karma 4.4.1执行ng test中途报[karma-server]: UnhandledRejection如何解决?
Karma 4.4.1执行ng test出现UnhandledRejection错误的成因及修复方案
错误成因
- 版本兼容性冲突:Karma 4.4.1属于老旧版本,与新版Angular CLI、高版本Node.js存在适配问题,运行时触发未处理的Promise拒绝。
- 测试用例存在未处理Promise:已执行的26个测试用例中,某个用例的Promise未添加
catch处理,或async测试未正确使用await,触发全局UnhandledRejection事件,导致Karma进程崩溃。 - Chrome浏览器适配问题:新版Chrome与Karma 4.x的ChromeLauncher插件不兼容,浏览器启动后直接崩溃,进而引发Karma的未处理拒绝错误。
- Karma配置异常:浏览器启动参数错误、测试文件加载顺序不合理等配置问题,导致测试运行中出现未捕获的Promise异常。
修复方案
1. 升级Karma及相关依赖
升级到兼容的新版本,同步更新配套插件:
npm install karma@latest karma-chrome-launcher@latest karma-jasmine@latest --save-dev
升级后需检查karma.conf.js配置是否适配新版本,必要时调整配置项。
2. 排查并修复测试用例中的未处理Promise
- 逐个检查前26个测试用例,定位包含未处理Promise的代码,确保所有Promise都添加
catch处理,或在async测试中正确使用await。 - 临时添加全局监听,定位具体错误位置:
process.on('unhandledRejection', (reason, promise) => { console.error('未处理的Promise拒绝:', promise, '原因:', reason); });
将上述代码添加到测试入口文件(如test.ts),重新运行测试即可看到具体错误信息。
3. 调整Chrome浏览器配置
- 修改
karma.conf.js,添加兼容启动参数,禁用沙箱并改用无头模式:module.exports = function(config) { config.set({ browsers: ['ChromeHeadlessNoSandbox'], customLaunchers: { ChromeHeadlessNoSandbox: { base: 'ChromeHeadless', flags: ['--no-sandbox', '--disable-gpu', '--disable-dev-shm-usage'] } }, // 其他配置项... }); }; - 运行测试时指定无头模式:
ng test --watch=false --browsers=ChromeHeadlessNoSandbox
4. 匹配Node.js版本
Karma 4.4.1推荐使用Node.js 8.x-12.x版本,若当前Node.js版本过高,可降级到LTS版本(如12.x),避免版本冲突。
内容的提问来源于stack exchange,提问作者sashoalm
相关产品推荐
相关产品推荐

