Unable to run Coverage with Karma
Asked Answered
E

9

44

I'm trying to run coverage with karma, and I get the warning: WARN [preprocess]: Can not load "coverage", it is not registered!

I thought I installed coverage when I ran 'npm install -g karma-coverage --save-dev'

Here's my config file:

module.exports = function(config) {
      config.set({
        // base path, that will be used to resolve files and exclude
        basePath: '',

        frameworks: ['jasmine'],

        // list of files / patterns to load in the browser
        files: [
                bunch of files..
        ],

        // list of files to exclude
        exclude: [],

        // use dots reporter, as travis terminal does not support escaping sequences
        // possible values: 'dots', 'progress'
        // CLI --reporters progress
        reporters: ['progress', 'coverage'],

        junitReporter: {
          // will be resolved to basePath (in the same way as files/exclude patterns)
          outputFile: 'test-results.xml'
        },

        // web server port
        // CLI --port 9876
        port: 9876,

        // enable / disable colors in the output (reporters and logs)
        // CLI --colors --no-colors
        colors: true,

        // level of logging
        // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
        // CLI --log-level debug
        logLevel: config.LOG_INFO,

        // enable / disable watching file and executing tests whenever any file changes
        // CLI --auto-watch --no-auto-watch
        autoWatch: true,

        // Start these browsers, currently available:
        // - Chrome
        // - ChromeCanary
        // - Firefox
        // - Opera
        // - Safari (only Mac)
        // - PhantomJS
        // - IE (only Windows)
        // CLI --browsers Chrome,Firefox,Safari
        browsers: ['ChromeCanary'],

        // If browser does not capture in given timeout [ms], kill it
        // CLI --capture-timeout 5000
        captureTimeout: 20000,

        // Auto run tests on start (when browsers are captured) and exit
        // CLI --single-run --no-single-run
        singleRun: true,

        // report which specs are slower than 500ms
        // CLI --report-slower-than 500
        reportSlowerThan: 500,

        // compile coffee scripts
        preprocessors: {
            'someFileName': ['coverage'],
        },

        plugins: [
          'karma-jasmine',
          'karma-chrome-launcher',
          'karma-firefox-launcher',
        ],

    coverageReporter: {
        'type' : 'cobertura',
        'dir': 'coverage/'
    }

  });
};
Edyth answered 6/8, 2013 at 0:14 Comment(1)
Did you ever get this solved? One thing that I noticed sometimes throws things for a loop is global vs local install. Often times I have had to use a "npm link" to get things to work. ie: npm link karma-coverage in this instance. Also, I do think you really need to have "karma-coverage" in your plugin list.Halhalafian
U
54

I got the same [WARN] because the plugin 'karma-coverage' was not defined inside the plugins of the config, try to see if adding it fixes your warning, not sure if it will fix your full problem.

plugins: [
  'karma-jasmine',
  'karma-coverage',
  'karma-chrome-launcher',
  'karma-firefox-launcher',
],

UPDATE:
I also had a different problem when running the coverage, caused by istanbul, my error was

[coverage]: [TypeError: Cannot set property 'covered' of undefined]

After having a look what istanbul was doing it turned out that the paths to some of my js unit files were outdated in the preprocessors.

It was doing some of the coverage reports but it was not generating deep coverage reports for all files hence the error. Once I fixed the paths it was all good.

    preprocessors : {
        '**/app/js/*/*.js' : 'coverage',
        '**/app/js/modules/*/*.js' : 'coverage',
        '**/app/js/services/*/*.js' : 'coverage'
    }, 
Upwind answered 18/9, 2013 at 18:47 Comment(2)
If you are running a globally installed karma node package, then all the other karma plugins must be installed globally as well; If you are running a project local karma, you need to ensure other karma plugins are locally installed for your project. Having locally karma plugins and launching a globally installed karma will result in 'karma-coverage'-not-registred type of error as well.Geiss
In my case all I had to do is run "npm install karma-coverage" (not even plugin section was required)Collide
U
13

For what it's worth, this works fine for me. Installed with:

npm install -g karma
npm install -g karma-coverage

Config in karma.config.js:

module.exports = function(config) {
  config.set({
    basePath: '',
    frameworks: ['jasmine'],
    files: ['app.js','tests.js'],
    preprocessors: { 'app.js': 'coverage' },
    reporters: ['dots', 'coverage'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome'],
    captureTimeout: 60000,
    singleRun: false
  });
};

Run with karma start karma.config.js.

Unknit answered 10/8, 2013 at 16:14 Comment(5)
fwiw this does not produce coverage output for me.Devaluation
Usually /usr/local/bin/ and /usr/local/lib/node_modules I think.Unknit
@FutuToad I believe if you run npm install -g as root, they will goto /usr/local/. Otherwise they should be going to /home/user/, otherwise known as ~/. The advised method for running node, npm, nvm, ruby, and rvm are all as a non-root user.Almeria
Why app.js for the preprocessor? Was this for express framework?Spellbind
No, it just happened that in this example I had one "production" file, which happened to be called "app.js". The preprocessor line says to use the 'coverage' preprocessor on the 'app.js' file. Usually you'd provide a pattern like "*spec.js" there instead of just one file.Unknit
C
10

For those who are using grunt test to run the karma test, and have the problem of coverage plugin not loaded issue. Please add the plugins setting into your Gruntfiles.js karama task, i.e.

// Test settings
karma: {
  unit: {
    configFile: 'test/karma.conf.js',
    singleRun: true,
    plugins:[
      'karma-jasmine',
      'karma-coverage',
      'karma-phantomjs-launcher'
    ],
  }
}
Canst answered 20/8, 2014 at 0:58 Comment(0)
B
6

Solution with no global install

Install karma-coverage:

npm install --saved-dev karma-coverage

Then edit karma.conf.js and add require('karma-coverage') to the array of plugins.

module.exports = function (config) {
  config.set({
    // ...
    plugins: [
      require('karma-coverage'), // ADD THIS
      // ...
    ],
  });
}
Boat answered 6/11, 2021 at 23:10 Comment(1)
Very helpful, I did not want the global install, this worked for me, thx.Preparatory
A
2

I had the same issue, until I moved karma.conf.js into the same directory as package.json, then it worked.

Autosome answered 24/3, 2015 at 18:9 Comment(1)
I have them in the same dir but I am still getting the errorTerena
D
2

I think the correct solution is

DON'T install karma globally

INSTALL karma-cli globally and install karma locally

npm i -g karma-cli

That's the problem then, you should use karma-cli globally, http://karma-runner.github.io/0.12/intro/installation.html If you install karma globally it doesn't use the local installation.

reference: github

Dripstone answered 15/5, 2017 at 22:5 Comment(0)
A
1

This problem is described in this answer.

When using a globally installed karma it doesn't load the locally installed plugins. Using node_modules/.bin/karma to start the tests should solve this problem.

The installation of the coverage module in the global "namespace" also works but is probably not what you want.

Abdominal answered 5/4, 2017 at 20:19 Comment(0)
K
1

If you face this issue with Angular 13. Install karma-coverage and here's the full config:


module.exports = function (config) {
  config.set({
    basePath: '',
    frameworks: ['jasmine', '@angular-devkit/build-angular'],
    plugins: [
      require('karma-jasmine'),
      require('karma-chrome-launcher'),
      require('karma-jasmine-html-reporter'),
      require('karma-coverage'),
      require('@angular-devkit/build-angular/plugins/karma'),
    ],
    client: {
      clearContext: false, // leave Jasmine Spec Runner output visible in browser
    },
    coverageReporter: {
      dir: require('path').join(__dirname, './coverage/project-name'),
      reporters: [
        {
          type: 'html',
        },
        {
          type: 'lcov',
        },
        {
          type: 'text-summary',
        },
      ],
    },
    reporters: ['progress', 'kjhtml'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome', 'ChromeHeadlessNoSandbox'],
    singleRun: false,
    customLaunchers: {
      ChromeHeadlessNoSandbox: {
        base: 'ChromeHeadless',
        flags: ['--no-sandbox'],
      },
    },
  });
};
Kaleidoscopic answered 2/4, 2022 at 23:37 Comment(0)
S
0

I installed karma-coverage globally it worked for me :-)

npm install -g karma-coverage
Solicit answered 22/8, 2016 at 18:28 Comment(1)
This worked for me... by why? I don't want to install it globally.Appalachia

© 2022 - 2024 — McMap. All rights reserved.