如何使用 Angular CLI 报告所有源文件的覆盖率

Hoo*_*oof 7 code-coverage karma-coverage angular-cli

ng test --code-coverage仅在运行覆盖率报告中报告正在进行测试的源文件的覆盖率时。如何配置检测以包含所有源文件(例如.ts文件src/app夹中的所有文件)?

我尝试过不同的事情:

  • https://github.com/angular/angular-cli/issues/1735之后,我尝试替换建议的上下文定义。这在我的情况下根本不起作用。输出大量错误,不执行任何测试
  • 删除 istanbul 作为依赖项并完全依赖 ,可以在karma-coverage其中进行配置includeAllSources: true- 但是 Angular CLI 不能在没有的情况下运行karma-coverage-istanbul-reporter
  • 以上与karma-coverage-istanbul-reporter作为依赖项的组合 - 与原始设置没有区别

必须有某种方法来检测 Angular CLI 以包含所有源文件。添加空规范似乎乏味且容易出错,因为如果类/源文件未进行测试,则覆盖率根本不会显示,因此您必须手动检查它是否包含在覆盖率报告中。

任何建议表示赞赏!

各种资料:

ng --version

@angular/cli: 1.4.8
node: 6.11.3
os: linux x64
@angular/animations: 4.4.6
@angular/common: 4.4.6
@angular/compiler: 4.4.6
@angular/core: 4.4.6
@angular/forms: 4.4.6
@angular/http: 4.4.6
@angular/platform-browser: 4.4.6
@angular/platform-browser-dynamic: 4.4.6
@angular/router: 4.4.6
@angular/cli: 1.4.8
@angular/compiler-cli: 4.4.6
@angular/language-service: 4.4.6
typescript: 2.3.4
Run Code Online (Sandbox Code Playgroud)

包.json:

"devDependencies": {
    "@angular/cli": "1.4.8",
    "@angular/compiler-cli": "^4.2.4",
    "@angular/language-service": "^4.2.4",
    "@types/jasmine": "~2.5.53",
    "@types/jasminewd2": "~2.0.2",
    "@types/node": "~6.0.60",
    "codelyzer": "~3.2.0",
    "jasmine-core": "~2.6.2",
    "jasmine-jquery": "2.1.1",
    "jasmine-spec-reporter": "~4.1.0",
    "karma": "^1.7.1",
    "karma-chrome-launcher": "~2.1.1",
    "karma-cli": "~1.0.1",
    "karma-coverage": "^1.1.1",
    "karma-coverage-istanbul-reporter": "^1.2.1",
    "karma-htmlfile-reporter": "0.3.5",
    "karma-jasmine": "~1.1.0",
    "karma-jasmine-html-reporter": "^0.2.2",
    "karma-json-reporter": "1.2.1",
    "karma-spec-reporter": "0.0.31",
    "ts-node": "~3.2.0",
    "tslint": "~5.7.0",
    "typescript": "~2.3.3"
}
Run Code Online (Sandbox Code Playgroud)

karma.conf.js:

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'),
            require('karma-spec-reporter'),
            require('karma-htmlfile-reporter'),
            require('karma-json-reporter'),
            //require('karma-coverage-istanbul-reporter'),
            require('@angular/cli/plugins/karma')
        ],
        files: [
        ],
        client:{
            clearContext: false // leave Jasmine Spec Runner output visible in browser
        },
        // coverageIstanbulReporter: {
        //     reports: [ 'html', 'text', 'text-summary', 'json' ],
        //     fixWebpackSourcePaths: true
        // },

        angularCli: {
            environment: 'dev'
        },
        reporters: ['spec', 'kjhtml', 'html', 'json', 'coverage'],
        preprocessors: {
            'src/app/*.ts': ['coverage']
        },
        htmlReporter: {
            outputFile: 'testresults/index.html',
            pageTitle: 'CRS Frontend Unit-tests - test results'
        },
        jsonReporter: {
            stdout: false,
            outputFile: 'testresults/results.json' // defaults to none
        },
        coverageReporter: {
            dir: 'coverage',
            includeAllSources: true,
            reporters: [
                { type: 'html', subdir: 'html' },
                { type: 'json', subdir: 'json' }
            ]
        },
        port: 9876,
        colors: true,
        logLevel: config.LOG_INFO,
        autoWatch: true,
        browsers: ['Chrome'],
        singleRun: true,
        failOnEmptyTestSuite: false
    });
};
Run Code Online (Sandbox Code Playgroud)

fer*_*ndo 4

如果您使用 Angular CLI 1.7.X,请进行以下更改

〜/src/test.ts

const context = require.context('./', true, /\/app\/.*\.ts$/);
Run Code Online (Sandbox Code Playgroud)

〜/src/tsconfig.spec.json

  "include": [
    "**/*.ts",
    "**/*.d.ts"
  ]
Run Code Online (Sandbox Code Playgroud)