You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 07:54:22