Nascent Personality Manifestation

    istanbul-instrumenter-loader

    3.0.1 • Public • Published

    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

    Install

    npm i istanbul-instrumenter-loader

    DownloadsWeekly Downloads

    388,410

    Version

    3.0.1

    License

    MIT

    Unpacked Size

    14.6 kB

    Total Files

    7

    Last publish

    Collaborators

    • avatar
    • avatar
    • avatar