如何在Jest中仅针对新增代码设置测试覆盖率阈值
PR增量代码测试覆盖率校验方案
针对React + Next.js + Jest技术栈,你可以通过以下步骤实现新增代码覆盖率低于80%自动阻断合并的需求:
- 安装增量覆盖率计算依赖
选择jest-coverage-diff作为计算工具,它可以直接读取Jest生成的覆盖率报告,结合Git分支对比结果自动计算新增/修改代码的覆盖率。执行以下命令安装开发依赖:npm install jest-coverage-diff --save-dev # 用yarn的话执行 yarn add jest-coverage-diff --dev # 用pnpm的话执行 pnpm add jest-coverage-diff -D - 调整Jest配置
确保你的Jest配置(jest.config.js或 Next.js 配置文件中内嵌的Jest配置)开启了JSON格式的覆盖率报告输出,示例配置如下:module.exports = { // 保留你原有所有Jest配置 coverageReporters: ['json', 'text', 'lcov'], collectCoverageFrom: [ 'src/**/*.{js,jsx,ts,tsx}', '!src/**/*.d.ts', '!src/**/*.config.js', // 其他你不需要统计覆盖率的路径可以在这里加排除规则 ] } - 新增校验脚本
在项目package.json的scripts字段中新增相关命令:
注意把{ "scripts": { // 保留原有其他脚本 "test:coverage": "jest --coverage", "check:diff-coverage": "jest-coverage-diff --baseBranch main --threshold 80" } }--baseBranch的参数值换成你们团队的主分支名(比如master),--threshold参数对应你要求的80%覆盖率阈值。 - 绑定PR检查流程
将上述两个命令加入你们的CI流水线中PR触发的任务里,执行顺序为先跑test:coverage生成覆盖率报告,再跑check:diff-coverage做校验。如果校验不通过,jest-coverage-diff会返回非0的状态码,自动阻断CI流程,对应PR就无法合并。 - 可选优化项
如果你觉得全量跑单测速度太慢,可以把单测命令改成只跑修改过的文件,提升CI执行效率:
该命令只会对比main分支,跑本次PR修改过的文件对应的单测,适合大项目使用。"test:coverage": "jest --coverage --changedSince main"
内容的提问来源于stack exchange,提问作者Gedrimas
相关产品推荐
相关产品推荐

