如何在GitHub创建状态检查,拦截未测试覆盖新增代码的合并?
解决方案:通过CircleCI + Codecov实现缺失测试时阻止代码合并
完全可以实现你需要的需求,核心是让Codecov的新增代码覆盖率检查作为GitHub的必填状态项,结合CircleCI流水线触发检查,一旦新增代码无对应测试就阻止合并。
步骤1:配置Codecov强制新增代码覆盖率规则
在项目根目录创建.codecov.yml配置文件,通过以下规则强制新增代码的测试覆盖率达标:
coverage: status: patch: default: # 要求新增代码的测试覆盖率必须达到100%(可根据团队需求调整数值) target: 100% # 覆盖率低于目标值时直接标记检查失败 threshold: 0% # 禁止将此检查设为仅提示模式,必须作为强制校验项 informational: false # 可选:配置全局项目覆盖率要求,按需开启 # project: # default: # target: 80%
步骤2:在CircleCI中集成测试与Codecov上传
确保你的.circleci/config.yml包含测试执行和覆盖率报告上传步骤,示例配置片段:
jobs: build-test-coverage: docker: - image: circleci/node:20 # 替换为你的项目对应镜像 steps: - checkout - run: name: 安装依赖 command: npm install - run: name: 执行测试并生成覆盖率报告 command: npm run test -- --coverage --coverageReporters=lcov # 替换为你的项目测试命令 - run: name: 上传覆盖率报告到Codecov command: npx codecov workflows: ci-pipeline: jobs: - build-test-coverage
这段配置会在PR触发流水线时,自动执行测试、生成覆盖率报告并上传至Codecov。
步骤3:设置GitHub分支保护规则
- 进入GitHub仓库的
Settings→Branches→Branch protection rules - 编辑你要保护的分支(如
main),勾选Require status checks to pass before merging - 在可选的状态检查列表中,找到Codecov相关的检查项(通常为
codecov/patch),将其添加到必填检查列表 - 勾选
Require branches to be up to date before merging,避免过时PR被合并
完成以上配置后,只要PR中存在未被测试覆盖的新增代码,Codecov就会返回失败状态,GitHub将直接阻止该PR合并,直到所有新增代码都补充了对应测试用例。
内容的提问来源于stack exchange,提问作者Pavel
相关产品推荐
相关产品推荐

