从Angular 5升级到Angular 6后代码覆盖不完整

时间:2018-09-30 17:27:24

标签: angular typescript code-coverage istanbul karma-coverage

我将项目从5号角升级到6号角,我能够构建该项目并运行所有单元测试,但是代码覆盖率报告并不包括所有文件的覆盖率。 我的项目分为2个文件夹和2个模块app.module和我的应用程序模块。在根目录下有两个文件夹dev和src。 Dev文件夹包含main.ts和app.module,而src文件夹包含所有其他组件。运行ng test --code-coverage后,生成的覆盖率报告仅显示dev文件夹中文件的覆盖率,该报告显示3个文件test.ts,polyfill.ts和app.component.ts的覆盖率,我还有其他组件/ src文件夹中的服务/指令以及相应的规范文件,这些规范文件正在运行测试,但src文件夹下的文件未生成覆盖率。

这是我的angular.json文件测试部分的内容

"test": {
      "builder": "@angular-devkit/build-angular:karma",
      "options": {
        "main": "dev/test.ts",
        "karmaConfig": "./karma.conf.js",
        "polyfills": "dev/polyfills.ts",
        "tsConfig": "dev/tsconfig.spec.json",
        "scripts": [],
        "styles": [
          "dev/styles.scss"
        ],
        "assets": [
          "dev/assets"
        ]
      }
    },

test.ts的内容

// Then we find all the tests.
const context1 = require.context('./', true, /\.spec\.ts$/);
const context = require.context('../src', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);
context1.keys().map(context1);
// Finally, start Karma to run the tests.
__karma__.start();

package.json文件的内容

"devDependencies": {
"@angular-devkit/build-angular": "~0.8.0",
"@angular/animations": "^6.1.9",
"@angular/cli": "^6.1.1",
"@angular/common": "^6.1.9",
"@angular/compiler": "^6.1.9",
"@angular/compiler-cli": "^6.1.9",
"@angular/core": "^6.1.9",
"@angular/forms": "^6.1.9",
"@angular/http": "^6.1.9",
"@angular/platform-browser": "^6.1.9",
"@angular/platform-browser-dynamic": "^6.1.9",
"@angular/router": "^6.1.9",
"@northstar/shared-module": "^5.0.5",
"@types/faker": "^4.1.4",
"@types/jasmine": "^2.8.8",
"@types/node": "^6.0.117",
"chai": "3.5.0",
"codelyzer": "^4.4.2",
"core-js": "^2.5.7",
"faker": "^4.1.0",
"htmlhint": "0.9.13",
"jasmine-core": "^2.99.1",
"jasmine-spec-reporter": "~4.2.1",
"karma": "^3.0.0",
"karma-chrome-launcher": "~2.2.0",
"karma-cli": "1.0.1",
"karma-coverage-istanbul-reporter": "^2.0.1",
"karma-istanbul-threshold": "1.2.2",
"karma-jasmine": "^1.1.2",
"karma-jasmine-html-reporter": "~0.2.2",
"karma-trx-reporter": "~0.2.9",
"ng-packagr": "^3.0.6",
"protractor": "^5.3.0",
"rimraf": "2.5.2",
"rxjs": "^6.3.3",
"stylelint": "~8.4.0",
"stylelint-order": "~0.6.0",
"ts-node": "^5.0.1",
"tsickle": "^0.32.1",
"tslint": "^5.11.0",
"typescript": "^2.9.2",
"web-animations-js": "~2.3.1",
"zone.js": "^0.8.19"

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('karma-istanbul-threshold'),
        require('karma-trx-reporter'),
        require('@angular-devkit/build-angular/plugins/karma')
    ],
    client: {
        clearContext: false // leave Jasmine Spec Runner output visible in browser
    },
    mime: {
        'text/x-typescript': ['ts', 'tsx']
    },
    coverageIstanbulReporter: {
        dir: require('path').join(__dirname, 'coverage'), reports: ['html', 'lcovonly', 'text-summary', 'json'],
        fixWebpackSourcePaths: true
    },
    istanbulThresholdReporter: {
        src: 'coverage/coverage-final.json',
        reporters: ['text'],
        thresholds: {
            global: {
                statements: 80,
                branches: 65,
                functions: 80,
                lines: 80,
            },
            // **********For later **********//
            // each: {
            //  statements: 80,
            //  branches: 80,
            //  functions: 80,
            //  lines: 80,
            // },
        }
    },
    trxReporter: {
        outputFile: 'test/test-results.trx',
        shortTestName: false
    },

    reporters: config.angularCli && config.angularCli.codeCoverage
        ? ['progress', 'coverage-istanbul','trx', 'istanbul-threshold']
        : ['progress', 'kjhtml','trx'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome'],
    singleRun: false,
    browserDisconnectTolerance: 2,
    browserNoActivityTimeout: 95000,
    browserDisconnectTimeout: 30000,
    captureTimeout: 60000
});

0 个答案:

没有答案