GitHub Action运行ng test返回exit code 1错误该如何解决?
问题原因
核心触发原因是覆盖率阈值校验失败:
你在测试命令中开启了--code-coverage参数,Angular默认集成的Karma覆盖率插件会对统计的覆盖率数值做阈值校验,只要语句、分支、函数、行覆盖率任意一项低于预设的最低阈值,哪怕所有测试用例执行成功,也会返回退出码1,最终导致CI任务报错。
本地执行正常通常是两种情况:
- 本地的配置文件中没有开启覆盖率阈值校验,或者阈值设置远低于当前的覆盖率数值
- 本地执行时未使用完整的
test:ci命令,或者本地有未提交的配置修改
小概率的其他原因:Chrome Headless在CI无桌面环境下的进程异常,不过从你的日志看测试已经完整执行、覆盖率报告正常生成,该情况可以排除。
解决思路
按照你的实际需求选择对应方案即可:
不需要校验覆盖率、只需要生成报告:
打开项目根目录下的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相关配置,同步删除阈值规则。临时绕开校验不阻断CI流程(不推荐长期使用):
修改package.json中的test:ci脚本,在末尾加上|| true忽略非0退出码:"test:ci": "ng test --watch=false --code-coverage --source-map true || true"保留覆盖率校验规则:
补充项目的单元测试用例,把各项覆盖率数值提升到配置的阈值以上即可。
内容的提问来源于stack exchange,提问作者netdjw
相关产品推荐
相关产品推荐

