karma-istanbul-threshold

Karma reporter that checks coverage thresholds with coverage data generated by karma-coverage. Because it reads its data from a json file, it can also handle remapped coverage data provided by karma-remap-istanbul to allow source-map support.

Usage no npm install needed!

<script type="module">
  import karmaIstanbulThreshold from 'https://cdn.skypack.dev/karma-istanbul-threshold';
</script>

README

karma-istanbul-threshold

Build Status

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'], // use 'text' reporter to get text reports like in the screenshot 
    //reporters: ['teamcity'],  // use 'teamcity' reporter to generate output for teamcity
    excludes: [
      'some/module/*.ts' // will exclude .ts files in `path/to/source/some/module`
    ],
    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'],
  // Creates coverage reports and stores as json
  coverageReporter: {
    reporters: [
      { type: 'json', dir: 'tmp/coverage', subdir: '.', file: 'coverage-unmapped.json' }
    ],
  },
  // Creates a source-mapped version of coverage report  
  remapIstanbulReporter: {
    src: 'tmp/coverage/coverage-unmapped.json',
    reports: {
      'json': 'tmp/coverage/coverage-mapped.json'
    },
  },
  // Uses source-mapped version to check coverage thresholds
  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,
      },
    },    
  }
}