1. istanbul-instrumenter-loader
Istanbul instrumenter loader for webpack
istanbul-instrumenter-loader
Package: istanbul-instrumenter-loader
Created by: webpack-contrib
Last modified: Sun, 19 Jun 2022 03:08:32 GMT
Version: 3.0.1
License: MIT
Downloads: 722,208
Repository: https://github.com/webpack-contrib/istanbul-instrumenter-loader

Install

npm install istanbul-instrumenter-loader
yarn add istanbul-instrumenter-loader

npm
node
deps
tests
coverage
chat

Istanbul Instrumenter Loader

Instrument JS files with istanbul-lib-instrument for subsequent code coverage reporting

Install

 npm i -D istanbul-instrumenter-loader

Usage

References

Structure

├─ src
│ |– components
│ | |– bar
│ | │ |─ index.js
│ | |– foo/
│     |– index.js
|– test
| |– src
| | |– components
| | | |– foo
| | | | |– index.js

To create a code coverage report for all components (even for those for which you have no tests yet) you have to require all the 1) sources and 2) tests. Something like it's described in "alternative usage" of karma-webpack

test/index.js

 // requires all tests in `project/test/src/components/**/index.js`
const tests = require.context('./src/components/', true, /index\.js$/);

tests.keys().forEach(tests);

// requires all components in `project/src/components/**/index.js`
const components = require.context('../src/components/', true, /index\.js$/);

components.keys().forEach(components);

ℹ️ This file will be the only entry point for karma

karma.conf.js

 config.set({
  ...
  files: [
    'test/index.js'
  ],
  preprocessors: {
    'test/index.js': 'webpack'
  },
  webpack: {
    ...
    module: {
      rules: [
        // instrument only testing sources with Istanbul
        {
          test: /\.js$/,
          use: { loader: 'istanbul-instrumenter-loader' },
          include: path.resolve('src/components/')
        }
      ]
    }
    ...
  },
  reporters: [ 'progress', 'coverage-istanbul' ],
  coverageIstanbulReporter: {
    reports: [ 'text-summary' ],
    fixWebpackSourcePaths: true
  }
  ...
});

with Babel

You must run the instrumentation as a post step

webpack.config.js

 {
  test: /\.js$|\.jsx$/,
  use: {
    loader: 'istanbul-instrumenter-loader',
    options: { esModules: true }
  },
  enforce: 'post',
  exclude: /node_modules|\.spec\.js$/,
}

Options

The loader supports all options supported by istanbul-lib-instrument

Name Type Default Description
debug {Boolean} false Turn on debugging mode
compact {Boolean} true Generate compact code
autoWrap {Boolean} false Set to true to allow return statements outside of functions
esModules {Boolean} false Set to true to instrument ES2015 Modules
coverageVariable {String} __coverage__ Name of global coverage variable
preserveComments {Boolean} false Preserve comments in output
produceSourceMap {Boolean} false Set to true to produce a source map for the instrumented code
sourceMapUrlCallback {Function} null A callback function that is called when a source map URL is found in the original code. This function is called with the source filename and the source map URL

webpack.config.js

 {
  test: /\.js$/,
  use: {
    loader: 'istanbul-instrumenter-loader',
    options: {...options}
  }
}

Maintainers


Kir Belevich

Juho Vepsäläinen

Joshua Wiens

Michael Ciniawsky

Matt Lewis

RELATED POST

10 Must-Know Windows Shortcuts That Will Save You Time

10 Must-Know Windows Shortcuts That Will Save You Time

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Navigating AWS Networking: Essential Hacks for Smooth Operation

Navigating AWS Networking: Essential Hacks for Smooth Operation

Achieving Stunning Visuals with Unity's Global Illumination

Achieving Stunning Visuals with Unity's Global Illumination

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code