Jest: How to merge coverage reports from different jest test runs

Viewed 13521

Has anyone managed to combine test coverage report from two separate jest test runs?

I am newbie trying to use the default jest coverage reporters: ["json", "lcov", "text", "clover"]

I have tried using nyc to combine coverage-final*.json files from tmp folder and output to a full-test-coverage/ folder.

npx nyc report --report-dir=full-test-coverage/ --reporter=html -t tmp 

The full-test-coverage folder is created with index.html etc. However, the combined report is empty.

3 Answers

I managed to get it working with nyc. Steps:

  • Collect multiple coverage reports using coverage reporter "json"
  • Put them all in one directory (which in my case required renaming multiple coverage-final.json files)
  • nyc merge multiple-sources-dir merged-output/merged-coverage.json
  • nyc report -t merged-output --report-dir merged-report --reporter=html --reporter=cobertura

I was struggling with this too but I managed to do it by using the istanbul-merge package

So assuming that you want to merge two test coverage named coverage-final.json located in two different folders f1 and f2,and name the output f3/coverage.json you can do :

npx istanbul-merge --out coverage.json ./f1/coverage-final.json ./f2/coverage-final.json

and then use instanbul to create the HTML report :

npx istanbul report --include coverage.json --dir f3 html

To merge, I usually use nyc with --no-clean option, like this:

{
    "cover": "npm run cover:unit && npm run cover:integration && npm run cover:report",
    "cover:unit": "nyc --silent npm run test:unit",
    "cover:integration": "nyc --silent --no-clean npm run test:integration",
    "cover:report": "nyc report --reporter=text-lcov > coverage.lcov",
}
Related