【问题标题】:Karma , Istanbul - code coverage report Unknown% ( 0/0 )Karma , 伊斯坦布尔 - 代码覆盖率报告 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,
});
}

【问题讨论】:

标签: angular karma-jasmine karma-runner angular-test karma-coverage


【解决方案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)

    ================================================ ==========

    【讨论】:

      猜你喜欢
      • 2014-05-15
      • 2013-12-21
      • 2019-09-03
      • 1970-01-01
      • 2018-05-25
      • 2017-12-13
      • 2015-07-02
      • 1970-01-01
      • 2016-01-22
      相关资源
      最近更新 更多