我正在运行以下命令进行单元测试并生成代码覆盖率报告。
no_note=0
它正在覆盖文件夹中编写代码覆盖率报告。
我需要查看整个项目的覆盖范围,而不仅仅是有测试的文件。
karma.conf.js
ng test --code-coverage
答案 0 :(得分:11)
我遇到了同样的问题,我找到了一个简单的解决方法,无需任何大配置即可为我提供技巧。
import './app.module';
就是这样;)
关键是,您的应用模块很可能是您的应用程序的核心部分,它直接或间接地导入任何其他使用过的文件。现在您已经创建了spec文件,模块中包含的所有内容也应该包含在测试覆盖率报告中。
我不是100%确定这是否适用于延迟加载的模块。如果没有,您只需在app.module.spec.ts中导入这些延迟加载的模块,或者在每个模块中创建一个spec文件,然后导入模块。
答案 1 :(得分:9)
以下是执行此操作的方法:
将client
部分添加到karma.conf.js
,如下所示:
plugins: [
...
],
client: {
codeCoverage: config.angularCli.codeCoverage
},
files: [
...
],
根据test.ts
参数
codeCoverage
更改为要求文件
let context;
if (__karma__.config.codeCoverage) {
context = require.context('./app/', true, /\.ts/);
} else {
context = require.context('./app/', true, /\.spec\.ts/);
}
context.keys().map(context);
更新:
由于Angular CLI 1.5.0
需要执行其他步骤:
在tsconfig.spec.json
添加tsconfig-cc.spec.json
文件旁边,其中包含以下内容:
{
"extends": "./tsconfig.spec.json",
"include": [
"**/*.ts"
]
}
在angular-cli.json
中将以下内容添加到apps
数组:
{
"root": "src/",
"polyfills": "polyfills.ts",
"test": "test.ts",
"testTsconfig": "tsconfig-cc.spec.json"
}
在karma.conf.js
中将以下内容添加到angularCli
部分:
app: config.angularCli.codeCoverage ? '1' : '0'
最终应该看起来像这样:
angularCli: {
environment: 'dev',
app: config.angularCli.codeCoverage ? '1' : '0'
},
那么这里发生了什么?
显然他们已经修复了Angular编译器插件,它现在从tsconfig.spec.json
获取文件globs。只要我们在**/*.spec.ts
中仅包含tsconfig.spec.json
,这些就是唯一包含在覆盖范围内的文件。
显而易见的解决方案是让tsconfig.spec.json
包含所有文件(除require.context
之外)。但是,即使在没有覆盖的情况下运行(这是我们不想要的),这也会减慢所有测试的速度。
其中一个解决方案是使用angular-cli
处理多个应用的功能
通过在apps
数组中添加另一个条目,我们会为"另一个"添加另一个配置。 (实际上是同一个)app
我们删除此配置中的所有不相关信息,只留下测试配置,并添加另一个tsconfig
,其中包含所有ts
个文件。
最后,我们告诉angular-cli
karma
插件使用第二个应用程序(索引1
)的配置运行测试,以防它运行代码覆盖并运行第一个应用程序(索引0
)的配置,如果它在没有代码覆盖率的情况下运行。
重要说明:在此配置中,我假设您在.angular-cli.json
中只有一个应用程序。如果你有更多,你必须相应地调整索引。
答案 2 :(得分:0)
1)在./src/test.ts中设置 /然后找到所有测试。
const context = require.context(‘./app/’, true, /\.ts/);
代替标准 2)使用
更新src / tsconfig.spec.json“include”: [
“**/*.ts”
3)在angular.json中设置
“test”: {
“builder”: “@angular-devkit/build-angular:karma”,
“options”: {
“codeCoverage”: true,
“main”: “src/test.ts”,
“polyfills”: “src/polyfills.ts”,
“tsConfig”: “src/tsconfig.spec.json”,
“karmaConfig”: “src/karma.conf.js”,
“styles”: [
“src/styles.scss”
],
“scripts”: [],
“assets”: [
“src/favicon.ico”,
“src/assets”,
“src/config”,
“src/manifest.json”
]
}
}
我的意思是添加此参数“ codeCoverage”:是
对我来说,它包括所有文件
我的意思是添加此参数“ codeCoverage”:是
对我来说,它包括所有文件
答案 3 :(得分:0)
我刚刚创建了业力插件,该插件将项目中的所有文件添加到coverage统计信息-https://github.com/kopach/karma-sabarivka-reporter。
要使用它→安装npm install --save-dev karma-sabarivka-reporter
并像这样更新karma.conf.js
:
reporters: [
// ...
'sabarivka'
// ...
],
coverageReporter: {
include: 'src/**/!(*.spec|*.module|environment*).ts', // glob patter which matchs all the files you want to be included into the coverage result
exclude: 'src/main.ts',
// ...
},
这无需任何其他操作即可解决问题。易于添加到现有项目以及新项目中。
答案 4 :(得分:-1)
karma.conf.js应该是这样的。无需任何其他配置,cli将负责一切。停止上一次运行ng test
并运行ng test --code-coverage
。
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular/cli'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular/cli/plugins/karma')
],
client:{
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
reports: [ 'html', 'lcovonly' ],
fixWebpackSourcePaths: true
},
angularCli: {
environment: 'dev'
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false
});
};
答案 5 :(得分:-5)
使用以下给定命令检查代码覆盖率:
ng test -cc