Jest code coverage protection is a simple utility that allows you to compare code coverage between two branches during your ci/cd steps. All you will need to do is generate a json summary of the coverage on your current branch, checkout the desired comparison branch during the ci/cd step and generate a json summary of the coverage for that as well and point jest-code-coverage-protection to both summary files and it will tell you if code coverage on your code changes has increased or decreased using the exit code.
- Add
json-summary
as coverage reporter to jest configuration
npm install jest-code-coverage-protection --save-dev
"scripts": {
"jccp": "jccp"
},
Usage: jccp [options]
Compare coverage-summary.json generated by jest
Options:
-V, --version output the version number
-f, --file <filename> The file generated by the (feature) branch you want to check (default: "coverage/coverage-summary.json")
-c, --compare <filename> The file generate by the (master) branch you want to compare against (default: "master/coverage/coverage-summary.json")
-n, --new <threshold The minimal threshold new code should have (default: "0.80")
-v, --variance <variance> Allow for variance, e.g. allow 0.05 to allow a 5% decrease using hold (default: "0")
-m, --mode <mode> Force <new> code threshold or do not allow decrease <hold> (default: "hold")
-h, --help display help for command
- Make sure your branches generate the coverage-summary.json file using the coverage reporter json summary
- Add checkout of comparison branch(master) to your build step
- Run jccp command
- Catch exit codes of jccp, 0 = coverage check passed, 1 = coverage check failed
We run it in our workflow here: .github/workflows/node.js.yml
git clone https://github.com/jschaftenaar/jest-code-coverage-protection --single-branch master
cd master && npm ci && npm test && cd ..
npm run jccp
The above method is by far the simplest way to add code coverage protection to your project. A more efficient but more involved way to setup code coverage protection is to commit your master/main coverage file on a special branch in your project and run your tests comparison file against that file
jccp -m new -n 0.9 <new code should have at least 90% code coverage>
jccp -m hold -v 0.5 <overall code coverage should be within 0.5% of comparison branch>
jccp -f cover.json <specify input file for the feature branch>