如何在GitHub Actions中检查单元测试覆盖率是否达65%要求
Jest 覆盖率校验 + GitHub Actions 配置方案
1. 配置65%覆盖率阈值校验
直接用Jest原生的覆盖率阈值能力就行,不用额外写判断脚本,两种配置方式选一个即可:
- 方式一:改项目内Jest配置(推荐,长期维护方便)
在package.json的jest配置段,或者独立的jest.config.js里添加coverageThreshold规则,四个核心覆盖率维度统一设为65即可:// package.json 示例 { "scripts": { "jest-coverage": "jest --coverage" }, "jest": { "coverageThreshold": { "global": { "branches": 65, "functions": 65, "lines": 65, "statements": 65 } } } } - 方式二:直接写在npm脚本里,不用单独改Jest配置
把package.json里的jest-coverage脚本改成带参数的形式:{ "scripts": { "jest-coverage": "jest --coverage --coverageThreshold='{\"global\":{\"branches\":65,\"functions\":65,\"lines\":65,\"statements\":65}}'" } }
如果需要对个别特殊文件放宽阈值,也可以在coverageThreshold里单独加路径规则,全局65%的要求按上面配置就够。
2. 覆盖率不达标时自动阻断流程
不需要额外加配置:Jest检测到任意一项覆盖率低于设定阈值时,会直接以非0状态码退出进程。GitHub Actions的默认执行逻辑就是「任意步骤返回非0退出码,直接标记当前Job失败,终止后续所有步骤执行」。
也就是说只要按上面的方式配好阈值,跑npm run jest-coverage的时候如果覆盖率没到65%,这一步直接飘红报错,后面的构建、部署步骤全不会跑,天然满足阻断要求。报错时终端还会明确打印哪一项覆盖率差了多少,方便定位问题。
3. 配置推送代码自动触发工作流
在workflow的YAML文件最顶层添加on触发规则即可,如果要监听所有分支的push提交,直接写:
on: push
如果只需要监听特定分支(比如main、develop)的推送,就细化分支配置:
on: push: branches: [ main, develop ]
完整可用配置参考
你原来的配置漏了代码拉取、依赖安装步骤,直接跑会报错,完整可用的片段如下:
name: CI/CD Pipeline on: push # 所有push事件自动触发 jobs: build: name: Test & Build runs-on: ubuntu-latest steps: - name: Checkout repository code uses: actions/checkout@v4 - name: Install node dependencies run: npm ci - name: Run unit test and check coverage run: npm run jest-coverage # 这步不通过,后面所有步骤都不会执行 - name: Build production bundle run: npm run build # 后续部署步骤正常加在后面即可
内容的提问来源于stack exchange,提问作者doobean
相关产品推荐
相关产品推荐

