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

GitHub流水线中Karma单元测试执行成功但进程退出码为1

问题分析与解决方案

核心原因

你的Karma配置与命令行参数存在冲突,加上测试文件匹配规则的不合理设置,导致流水线中出现Karma重复执行、第二次无测试可跑的情况,最终触发进程退出码1。

具体修复步骤

1. 统一singleRun配置

命令行的--no-watch参数等价于Karma的singleRun: true,但你在karma.conf.js里设置了singleRun: false,二者冲突会触发重复执行逻辑。修改配置:

// karma.conf.js
module.exports = function(config) {
  config.set({
    // 保留其他原有配置
    singleRun: true, // 改为true,与--no-watch参数逻辑统一
    concurrency: 1,  // 先将并发数改为1,避免多实例启动冲突
  });
};

2. 修正测试文件匹配规则

当前files字段的**/*.spec.ts会递归匹配所有目录下的测试文件,包括编译输出目录(如out-tsc)里的生成文件,导致第二次执行时扫描到无效文件。修改为仅匹配源码目录:

// karma.conf.js
module.exports = function(config) {
  config.set({
    // 保留其他原有配置
    files: [
      'src/**/*.spec.ts' // 只匹配src目录下的测试文件
    ],
    preprocessors: {
      'src/**/*.spec.ts': ['webpack'] // 对应修改预处理器匹配规则
    },
  });
};

3. 优化命令行脚本

显式指定Karma配置文件,避免环境差异导致的配置加载异常,修改package.json中的脚本:

"test:prod": "ng test --karma-config=karma.conf.js --browsers=ChromeHeadless --no-watch"

4. 确保流水线环境依赖完整

GitHub流水线的Linux环境可能缺少ChromeHeadless运行依赖,需在安装步骤补充:

# 在流水线的依赖安装阶段执行
sudo apt-get update && sudo apt-get install -y chromium-browser

验证流程

修改完成后,先在本地执行npm run test:prod确认测试正常执行,再推送代码到GitHub流水线验证修复效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:56:08