Karma , 伊斯坦布尔 - 代码覆盖率报告 Unknown% (0/0)
Posted
技术标签:
【中文标题】Karma , 伊斯坦布尔 - 代码覆盖率报告 Unknown% (0/0)【英文标题】:Karma , Istanbul - code coverage report Unknown% ( 0/0 ) 【发布时间】:2020-08-20 00:48:01 【问题描述】:我正在收到这份报道摘要
=============================== Coverage summary ===============================
Statements : Unknown% ( 0/0 )
Branches : Unknown% ( 0/0 )
Functions : Unknown% ( 0/0 )
Lines : Unknown% ( 0/0 )
================================================================================
我应用了 Angular 文档中指示的代码更改 覆盖范围: https://angular.io/guide/testing#enable-code-coverage-report
但我总是得到同样空洞的夏天。
我的 karma.conf.js
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-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client:
clearContext: false // leave Jasmine Spec Runner output visible in browser
,
coverageIstanbulReporter:
dir: require('path').join(__dirname, './coverage/singleWindow'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true,
thresholds:
statements: 80,
lines: 80,
branches: 80,
functions: 80
,
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true,
);
【问题讨论】:
你发现了吗? 可能是this question的副本。 【参考方案1】:我在使用 ng test
运行测试时遇到了与 Angular 7 相同的问题。
事实证明,Angular CLI 默认禁用代码覆盖。您必须使用 ng test --code-coverage
开始您的测试,它才能工作。
您可以通过将"codeCoverage": true
添加到您的angular.json
文件的test
任务使其始终开启:
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects":
"name-of-your-app":
"root": "",
"sourceRoot": "src",
"projectType": "application",
"architect":
"build":
/* ... */
,
"test":
"builder": "@angular-devkit/build-angular:karma",
"options":
"main": "src/test.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "src/tsconfig.spec.json",
"karmaConfig": "./karma.conf.js",
"scripts": [],
"assets": [
"src/favicon.ico",
"src/assets"
],
"codeCoverage": true
欲了解更多信息:https://angular.io/guide/testing#enable-code-coverage-reports
【讨论】:
【参考方案2】:当覆盖范围为Unknown%
时,这意味着您可能启用它正确。
确保angular.json
中的"sourceRoot"
属性设置为项目源文件的根文件夹。
ng
cli uses the files in "sourceRoot"
to compute coverage。
对于测试,sourceRoot
似乎没有做任何其他事情,因此测试运行并通过,但覆盖不起作用。
【讨论】:
sourceRoot
是我的问题,谢谢@sorohan【参考方案3】:
无论是命令行还是配置,我都遇到了同样的代码覆盖率问题
解决方案: 需要检查其他组件的规范文件是否存在错误 当我们运行 ng test --code-coverage 时,它会编译所有文件,所以请确保所有规范和组件的文件都没有错误,这是我无法获得代码覆盖率的原因,它显示如下代码覆盖率
===================== 覆盖总结 ========================= ====== 声明:未知% ( 0/0 ) 分支:未知% ( 0/0 ) 函数:未知% ( 0/0 ) 行数:未知% ( 0/0 )
修复所有组件和规范文件错误后,我获得了成功的代码覆盖率 ================== 覆盖总结 ============================== = 报表 : 85% ( 17/20 ) 分店 : 0% ( 0/2 ) 函数 : 83.33% ( 5/6 ) 线路:84.21%(16/19)
================================================ ==========
【讨论】:
以上是关于Karma , 伊斯坦布尔 - 代码覆盖率报告 Unknown% (0/0)的主要内容,如果未能解决你的问题,请参考以下文章
Karma + Browserify + Jasmine + 伊斯坦布尔 + React 覆盖
Karma-coverage 检查 JS 文件中的测试覆盖率,而不是 Angular 2 中的 TS
使用 Istanbul + Webpack 覆盖 JSX 文件的代码