karma-istanbul-threshold
Checks coverage thresholds by using json coverage files generated by
Istanbul,
karma-coverage or
karma-remap-istanbul.
While karma-coverage already allows
threshold checks, it unfortunately does not play well with source maps.
karma-remap-istanbul can convert
results generated by karma-coverage
but does not offer threshold checking.
This plugin fills that gap by using a json file for threshold checking that can be generated
by Istanbul or karma-coverage (which internally uses Istanbul). Those json files can be remapped
by karma-remap-istanbul to enable source-map support for threshold checking.
Installation
The easiest way is to install karma-istanbul-threshold
as a devDependency
,
by running
npm install karma-istanbul-threshold --save-dev
Configuration
Add the plugin, reporter and reporter configuration in your karma.conf.js
.
{
plugins: ['karma-istanbul-threshold'],
reporters: ['progress', 'karma-istanbul-threshold'],
istanbulThresholdReporter: {
src: 'path/to/coverage-report.json',
basePath: path.resolve(__dirname, 'path/to/source'),
reporters: ['text'],
excludes: [
'some/module/*.ts'
],
thresholds: {
global: {
statements: 90,
branches: 90,
lines: 70,
functions: 90,
},
each: {
statements: 80,
branches: 80,
lines: 60,
functions: 80,
},
},
}
}
Example configuration with karma-coverage
and karma-remap-istanbul
{
preprocessors: {
'build/**/!(*spec).js': ['coverage']
},
plugins: ['karma-remap-istanbul', 'karma-coverage', 'karma-istanbul-threshold'],
reporters: ['progress', 'coverage', 'karma-remap-istanbul', 'istanbul-threshold'],
coverageReporter: {
reporters: [
{ type: 'json', dir: 'tmp/coverage', subdir: '.', file: 'coverage-unmapped.json' }
],
},
remapIstanbulReporter: {
src: 'tmp/coverage/coverage-unmapped.json',
reports: {
'json': 'tmp/coverage/coverage-mapped.json'
},
},
istanbulThresholdReporter: {
src: 'tmp/coverage/coverage-mapped.json',
basePath: path.resolve(__dirname, 'path/to/source'),
reporters: ['text'],
thresholds: {
global: {
statements: 90,
branches: 90,
lines: 70,
functions: 90,
},
each: {
statements: 80,
branches: 80,
lines: 60,
functions: 80,
},
},
}
}