12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- const { relative } = require('path')
- const Report = require('../report')
- exports.command = 'check-coverage'
- exports.describe = 'check whether coverage is within thresholds provided'
- exports.builder = function (yargs) {
- yargs
- .example('$0 check-coverage --lines 95', "check whether the JSON in c8's output folder meets the thresholds provided")
- }
- exports.handler = function (argv) {
- // TODO: this is a workaround until yargs gets upgraded to v17, see https://github.com/bcoe/c8/pull/332#discussion_r721636191
- if (argv['100']) {
- argv.lines = 100
- argv.functions = 100
- argv.branches = 100
- argv.statements = 100
- }
- const report = Report({
- include: argv.include,
- exclude: argv.exclude,
- extension: argv.extension,
- reporter: Array.isArray(argv.reporter) ? argv.reporter : [argv.reporter],
- reportsDirectory: argv['reports-dir'],
- tempDirectory: argv.tempDirectory,
- watermarks: argv.watermarks,
- resolve: argv.resolve,
- omitRelative: argv.omitRelative,
- wrapperLength: argv.wrapperLength,
- all: argv.all
- })
- exports.checkCoverages(argv, report)
- }
- exports.checkCoverages = async function (argv, report) {
- const thresholds = {
- lines: argv.lines,
- functions: argv.functions,
- branches: argv.branches,
- statements: argv.statements
- }
- const map = await report.getCoverageMapFromAllCoverageFiles()
- if (argv.perFile) {
- map.files().forEach(file => {
- checkCoverage(map.fileCoverageFor(file).toSummary(), thresholds, file)
- })
- } else {
- checkCoverage(map.getCoverageSummary(), thresholds)
- }
- }
- function checkCoverage (summary, thresholds, file) {
- Object.keys(thresholds).forEach(key => {
- const coverage = summary[key].pct
- if (coverage < thresholds[key]) {
- process.exitCode = 1
- if (file) {
- console.error(
- 'ERROR: Coverage for ' + key + ' (' + coverage + '%) does not meet threshold (' + thresholds[key] + '%) for ' +
- relative('./', file).replace(/\\/g, '/') // standardize path for Windows.
- )
- } else {
- console.error('ERROR: Coverage for ' + key + ' (' + coverage + '%) does not meet global threshold (' + thresholds[key] + '%)')
- }
- }
- })
- }
|