You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

70 lines
2.2 KiB

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] + '%)')
}
}
})
}