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