我在看业力的记者配置.
有一些可能的记者:进步,点,咆哮,覆盖.我没有找到解释每个选项的任何详细信息.
我尝试了进度和点,他们都打印日志到控制台,结果看起来一样.它们之间有什么区别?
咆哮,覆盖需要更多的配置,所以我没有成功测试它们.
我已经将Karma配置为报告我的JavaScript代码的覆盖范围.以下是karma.conf.js文件中配置的一部分:
coverageReporter: {
reporters: [
{
type: 'html',
dir: 'build/karma/coverage'
},
{
type: 'lcov',
dir: 'build/karma/coverage',
subdir: '.'
},
{
type: 'cobertura',
dir: 'build/karma/coverage'
}
]
},
Run Code Online (Sandbox Code Playgroud)
我的lcov.info文件格式如下:
TN:
SF:./app/scripts/app.js
FN:16,(anonymous_1)
FN:26,(anonymous_2)
FNF:2
FNH:1
FNDA:1,(anonymous_1)
FNDA:0,(anonymous_2)
DA:2,1
DA:20,1
DA:29,0
DA:34,0
LF:4
LH:2
BRF:0
BRH:0
end_of_record
Run Code Online (Sandbox Code Playgroud)
不幸的是,在Sonarqube JavaScript的插件,仅考虑与启动线SF:,DA:或BRDA:(CF LCOVParser).
因此,LCOV HTML报告(由伊斯坦布尔制作)使我在相同数据上的代码覆盖率高于Sonar.
有没有办法改变lcov.info生成的格式?
如果我查看伊斯坦布尔代码,我可以想象不同标签的含义:
BRF,BRH,BRDA是分支机构.FN,FNF …有没有办法从业力覆盖运行员https://github.com/karma-runner/karma-coverage的代码覆盖率报告中排除文件 ?
我的package.json看起来像这样..
"karma-phantomjs-launcher": "^0.1.4",
"karma-safari-launcher": "^0.1.1",
"karma-sinon-chai": "~0.2.0",
"karma-spec-reporter": "~0.0.16",
"mocha": "~1.20.1"
Run Code Online (Sandbox Code Playgroud)
我的npm版本是2.2.0
当我进行业力测试时,我会得到这个 - 业力开始my.conf.js
phantomjs karma-runner karma-mocha mocha-phantomjs karma-coverage
假设我有一个订阅服务功能的组件:
export class Component {
...
ngOnInit() {
this.service.doStuff().subscribe(
(data: IData) => {
doThings(data);
},
(error: Error) => console.error(error)
);
};
};
Run Code Online (Sandbox Code Playgroud)
订阅调用将两个匿名函数作为参数,我已设法为数据函数设置工作单元测试,但Karma不接受错误一的覆盖.
我已经尝试过监视console.error函数,抛出一个错误,然后期待调用间谍已被调用,但这并没有完全做到.
我的单元测试:
spyOn(console,'error').and.callThrough();
serviceStub = {
doStuff: jasmine.createSpy('doStuff').and.returnValue(Observable.of(data)),
};
serviceStub.doStuff.and.returnValue(Observable.throw(
'error!'
));
serviceStub.doStuff().subscribe(
(res) => {
*working test, can access res*
},
(error) => {
console.error(error);
console.log(error); //Prints 'error!' so throw works.
expect(console.error).toHaveBeenCalledWith('error!'); //Is true but won't be accepted for coverage.
}
);
Run Code Online (Sandbox Code Playgroud)
测试这些匿名函数的最佳实践是什么?确保测试覆盖率的最低要求是什么?
typescript karma-coverage angular2-testing angular2-observables angular
升级到 Angular 13 后,使用--code-coverage运行的测试失败,并出现缺少某些插件的错误
\n我正在使用karma-coverage-istanbul-reporter,karma.conf.js这导致了一些问题。我什至将其替换为默认值karma-coverage,但仍然看到相同的错误
ng test waxion --no-watch --code-coverage --browsers ChromeHeadless\nRun Code Online (Sandbox Code Playgroud)\n\xe2\xa0\x8b Generating browser application bundles (phase: setup)...20 11 2021 17:34:24.723:ERROR [reporter]: Can not load reporter "coverage", it is not registered!\n Perhaps you are missing some plugin?\n\xe2\xa0\x99 Generating browser application bundles (phase: building)...20 11 2021 17:34:27.353:INFO [karma-server]: Karma v6.3.9 server started at http://localhost:9876/\n20 11 2021 17:34:27.353:INFO [launcher]: Launching browsers Chrome with concurrency unlimited\n20 11 2021 17:34:27.353:ERROR [karma-server]: Error: Found …Run Code Online (Sandbox Code Playgroud) 如何设置karma测试运行器以生成打字稿项目的代码覆盖率报告?
鉴于以下文件夹结构和karma.conf.js文件,我已经在使用karma来运行用TypeScript编写的测试.
我已经与周围的摆弄karma-coverage和remap-istanbul,但没有任何运气呢.如果可能的话,我想在没有任何额外的情况下这样做npm scripts.
.
??? karma.conf.js
??? package.json
??? src
? ??? add.ts
??? test
? ??? addSpec.ts
??? tsconfig.json
??? typings
? ??? globals
? ??? index.d.ts
??? typings.json
Run Code Online (Sandbox Code Playgroud)
karma.conf.js
var istanbul = require('browserify-istanbul');
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['mocha', 'chai', 'sinon', 'browserify'],
files: [
'test/**/*Spec.ts'
],
exclude: [
],
preprocessors: {
'test/**/*Spec.ts': ['browserify']
},
browserify: {
debug: true,
plugin: ['tsify'],
transform: [
istanbul({irgnore: ['**/node_modules/**']})
]
},
reporters: ['progress', …Run Code Online (Sandbox Code Playgroud) 在升级到 Angular 11 之前,我通过以下命令运行了代码覆盖率的单元测试:
ng test --project my-app --code-coverage true
Run Code Online (Sandbox Code Playgroud)
当我将我的项目升级到 Angular 11 时,我仍然能够进行我的代码覆盖率测试,但是我开始收到一条消息,说“'karma-coverage-istanbul-reporter' 的使用自版本 11 以来已被弃用”。它要求我安装 karma-coverage 并更新 karma.conf.js。所以我做了它所要求的。我通过以下命令安装了 karma-coverage 和 karma:
npm install karma karma-coverage --save-dev
Run Code Online (Sandbox Code Playgroud)
结果,我在 package.json 中的 devDependencies 下看到了 karma 条目:
ng test --project my-app --code-coverage true
Run Code Online (Sandbox Code Playgroud)
我更新了我的 karma.conf.js 文件。以下是存在的内容,除了我的评论外,一切都和原来一样:
npm install karma karma-coverage --save-dev
Run Code Online (Sandbox Code Playgroud)
进行此更新后,发生了两件事,我不知道为什么。
当我运行正常的代码覆盖率命令时,我收到以下错误:“服务器在端口 9876 上启动失败:错误:必须安装 karma-coverage 才能运行代码覆盖率。” 我确实安装了它,正如我的 package.json 所示,但由于某种原因,我的项目无法识别这一点。此外,如果我将 karma-coverage-istanbul-reporter require 方法添加回我的 conf.js 文件,coverage 工作正常,但我仍然收到该弃用消息。谁能向我解释为什么我可能会收到此错误?
当我在没有覆盖的情况下运行测试时,我现在收到多个以前从未收到过的警告,例如:“无法从文件扩展名确定文件类型,默认为 js。要使警告静音,请指定 C:/Angular/ 的有效类型配置文件中的 my-project/projects/my-app/src/app/app.component.spec.ts。” 我需要做什么来解决这个问题?
编辑:我找到了答案。在coverageReporter 对象中,您需要将fixWebpackSourcePaths 属性添加为true:
"karma": "^5.2.3",<br>
"karma-coverage": "^2.0.3"
Run Code Online (Sandbox Code Playgroud) unit-testing karma-jasmine karma-coverage angular-cli angular11
早上好,
我有一个奇怪的问题,我似乎无法解决.我已经写出了我的Karma测试并且执行正确,但是当我尝试连接Karma的代码覆盖时,无论如何都会吐出100%.
我看了一下这里提出的其他问题,似乎没有一个问题可以解决我的问题.任何帮助将不胜感激.
使用:
"karma": "~0.12.37",
"karma-babel-preprocessor": "^5.2.1",
"karma-browserify": "^4.2.1",
"karma-coverage": "^0.4.2",
"karma-jasmine": "~0.3.5",
"karma-phantomjs-launcher": "^0.2.0",
Run Code Online (Sandbox Code Playgroud)
这是我的karma.conf.js
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['browserify', 'jasmine'],
files: [
'bower_components/jquery/dist/jquery.js',
'bower_components/angular/angular.js',
'bower_components/angular-animate/angular-animate.js',
'bower_components/angular-cookies/angular-cookies.js',
'bower_components/angular-mocks/angular-mocks.js',
'bower_components/angular-resource/angular-resource.js',
'bower_components/angular-sanitize/angular-sanitize.js',
'bower_components/angular-touch/angular-touch.js',
'bower_components/angular-ui-router/release/angular-ui-router.js'
'src/*.html',
'src/**/*.html',
'src/app/index.js',
'src/app/**/*.js'
],
exclude: [],
preprocessors: {
'src/app/index.js': ['browserify', 'coverage'],
'src/app/**/*.js': ['browserify', 'coverage']
},
browserify: {
debug: true,
transform: ['babelify', 'stringify']
},
reporters: ['progress', 'coverage'],
port: 9876,
colors: true,
autoWatch: true,
browsers: ['PhantomJS'],
singleRun: false
});
};
Run Code Online (Sandbox Code Playgroud)
我的文件结构是:
src …Run Code Online (Sandbox Code Playgroud) 我有一个基本的Angular/Typescript项目,有12个基本的单元测试,运行得很好.现在我想获得这些测试的报道.我尝试了各种方法,但没有一种方法有效,所以我决定从业力覆盖开始并在这里寻求帮助.:-)
目前,当我运行业力时,我收到每个源文件的错误消息,如下所示:
Failed to parse file: C:/Users/FRBA/Documents/MyProject/src/app/nav/new-panel/new-panel.component.ts
07 07 2017 07:54:35.832:ERROR [preprocessor.coverage]: Line 1: Unexpected token
at C:/Users/FRBA/Documents/MyProject/src/app/nav/new-panel/new-panel.component.ts
Run Code Online (Sandbox Code Playgroud)
我的karma.conf.js看起来像这样:
var path = require('path');
module.exports = function (config) {
config.set({
files: [
'src/app/**/*.ts',
'test/app/**/*.ts'
],
basePath: '',
frameworks: ['jasmine', '@angular/cli'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-ie-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage'),
require('@angular/cli/plugins/karma')
],
client: {
clearContext: false
},
angularCli: {
environment: 'dev'
},
reporters: ['progress', 'kjhtml', 'coverage'],
preprocessors: {
'src/app/**/*.ts': ['coverage']
},
coverageReporter: {
type : 'html',
dir : 'coverage/'
},
port: 9876,
colors: true, …Run Code Online (Sandbox Code Playgroud) karma-coverage ×10
karma-runner ×7
typescript ×3
angular-cli ×2
angular ×1
angular11 ×1
browserify ×1
gulp-karma ×1
istanbul ×1
javascript ×1
karma-mocha ×1
lcov ×1
phantomjs ×1
sonarqube ×1
unit-testing ×1