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

GitHub Action运行ng test返回exit code 1错误该如何解决?

问题原因

核心触发原因是覆盖率阈值校验失败:
你在测试命令中开启了--code-coverage参数,Angular默认集成的Karma覆盖率插件会对统计的覆盖率数值做阈值校验,只要语句、分支、函数、行覆盖率任意一项低于预设的最低阈值,哪怕所有测试用例执行成功,也会返回退出码1,最终导致CI任务报错。

本地执行正常通常是两种情况:

  • 本地的配置文件中没有开启覆盖率阈值校验,或者阈值设置远低于当前的覆盖率数值
  • 本地执行时未使用完整的test:ci命令,或者本地有未提交的配置修改

小概率的其他原因:Chrome Headless在CI无桌面环境下的进程异常,不过从你的日志看测试已经完整执行、覆盖率报告正常生成,该情况可以排除。

解决思路

按照你的实际需求选择对应方案即可:

  1. 不需要校验覆盖率、只需要生成报告:
    打开项目根目录下的karma.conf.js,找到coverageIstanbulReporter配置项,删除或注释掉thresholds相关的阈值配置即可,示例如下:

    coverageIstanbulReporter: {
      dir: require('path').join(__dirname, './coverage'),
      reports: ['html', 'lcovonly', 'text-summary'],
      fixWebpackSourcePaths: true,
      // 注释或删除下面的阈值配置即可关闭校验
      // thresholds: {
      //   global: {
      //     statements: 80,
      //     lines: 80,
      //     branches: 80,
      //     functions: 80
      //   }
      // }
    }
    

    如果使用的是Angular 11+版本,还要检查angular.json中test配置项的codeCoverage相关配置,同步删除阈值规则。

  2. 临时绕开校验不阻断CI流程(不推荐长期使用):
    修改package.json中的test:ci脚本,在末尾加上|| true忽略非0退出码:

    "test:ci": "ng test --watch=false --code-coverage --source-map true || true"
    
  3. 保留覆盖率校验规则:
    补充项目的单元测试用例,把各项覆盖率数值提升到配置的阈值以上即可。

内容的提问来源于stack exchange,提问作者netdjw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:36:01