javascript 无法使用 Karma 运行 Coverage

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18069865/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-27 10:38:40  来源:igfitidea点击:

Unable to run Coverage with Karma

javascriptcode-coveragekarma-runner

提问by Caren

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'

当我运行'npm install -g karma-coverage --save-dev'时,我以为我安装了coverage

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/'
    }

  });
};

回答by vivascau

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.

我得到了相同的 [WARN] 因为插件 'karma-coverage' 没有在配置的插件中定义,试着看看添加它是否能解决你的警告,不确定它是否能解决你的全部问题。

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.

在查看了 istanbul 正在做什么之后,我发现我的一些 js 单元文件的路径在预处理器中已经过时了。

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'
    }, 

回答by RichardTowers

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:

配置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.

运行karma start karma.config.js

回答by Zeno Yu

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 pluginssetting into your Gruntfiles.js karama task, i.e.

对于那些使用 grunt test 运行 karma 测试,并且有覆盖插件未加载问题的人。请将plugins设置添加到您的 Gruntfiles.js karama 任务中,即

// Test settings
karma: {
  unit: {
    configFile: 'test/karma.conf.js',
    singleRun: true,
    plugins:[
      'karma-jasmine',
      'karma-coverage',
      'karma-phantomjs-launcher'
    ],
  }
}

回答by gbruins

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

我遇到了同样的问题,直到我将 karma.conf.js 移动到与 package.json 相同的目录中,然后它才起作用。

回答by coffeemakr

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/karmato start the tests should solve this problem.

使用全局安装的 karma 时,它不会加载本地安装的插件。使用node_modules/.bin/karma开始测试应该解决这个问题。

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

在全局“命名空间”中安装覆盖模块也有效,但可能不是您想要的。

回答by maxisam

I think the correct solution is

我认为正确的解决方案是

DON'T install karma globally

不要在全球范围内安装 karma

INSTALL karma-cli globally and install karma locally

全局安装 karma-cli 并在本地安装 karma

npm i -g karma-cli

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.htmlIf you install karma globally it doesn't use the local installation.

那就是问题所在,你应该全局使用 karma-cli,http://karma-runner.github.io/0.12/intro/installation.html如果你全局安装 karma 它不使用本地安装。

reference: github

参考:github

回答by LAXIT KUMAR

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

我在全球安装了 karma-coverage 它对我有用:-)

npm install -g karma-coverage