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
Unable to run Coverage with Karma
提问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 plugins
setting 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/karma
to 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