如何指定我要在其中包含用于代码覆盖的文件的文件夹?

时间:2019-07-09 12:26:50

标签: javascript angular jasmine karma-jasmine istanbul

我正在使用茉莉和业力进行单元测试。伊斯坦布尔记者。

我想指定要考虑哪个文件夹进行代码覆盖。 我想排除其他所有内容。

现在我完全不知道配置如何工作。 我要考虑的唯一文件夹是core文件夹。 (必须粘贴屏幕截图,因为防火墙不允许我上传图片)

enter image description here

karma.config:

module.exports = function (config) {
  config.set({
    basePath: '',
    files:['mockData.js', 'mockLocalization.js'],
    frameworks: ['jasmine', '@angular/cli'],
    plugins: [
      require('karma-jasmine'),
      require('karma-chrome-launcher'),
      //require('karma-phantomjs-launcher'),
      require('karma-jasmine-html-reporter'),
      require('karma-coverage-istanbul-reporter'),
      require('@angular/cli/plugins/karma'),
      require('karma-scss-preprocessor'),
       require('karma-sonarqube-reporter'),
       require('karma-junit-reporter'),

    ],
    client:{
      clearContext: false // leave Jasmine Spec Runner output visible in browser
    },
    angularCli: {
      environment: 'dev'
    },
    coverageIstanbulReporter: {

      reports: [ 'html', 'lcov', 'cobertura' ],
      fixWebpackSourcePaths: true,

    },

    junitReporter:{
      useBrowserName: false, 
      outputDir: 'report',
      // will be resolved to basePath (in the same way as files/exclude patterns)
      outputFile: 'karma-report.xml'
    },

    coverageReporter: {
      includeAllSources: false,
      dir: 'coverage',

      reporters: [
        { type: 'html', subdir: 'html' }
      ]
    },

    reporters: ['progress', 'kjhtml','coverage-istanbul'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome'],    //make sure it is chromeHeadless while running the pipeline otherwise it will fail.
    singleRun: true,
    browserDisconnectTimeout: 20000,
    browserDisconnectTolerance: 3,
    browserNoActivityTimeout: 120000,
    flags: [
      '--disable-web-security',
      '--disable-gpu',
      '--no-sandbox'
    ]
  });
};

记者:

enter image description here

编辑:

const context = require.context('./core', true, /\.spec\.ts$/);
context.keys().map(context);

enter image description here 看起来不错!

但是

const context = require.context('./core', true, /\.spec\.ts$/);
context.keys().map(context);
const context2 = require.context('./modules', true, /\.spec\.ts$/);
context2.keys().map(context2);

礼物:

enter image description here 为什么它包括所有突然发生的资产文件夹?

3 个答案:

答案 0 :(得分:1)

在src文件夹中,将test.js配置为仅指向要运行测试的文件夹

// Then we find all the tests.
const context = require.context('./app/folderyouwantoruntestcas', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

答案 1 :(得分:1)

正如@Chellappan指出的那样,该框架在代码覆盖范围中包括一个库。因为它是在我的组件之一中引用的。 我可以通过angular-cli.json中的以下内容将其从代码覆盖率中排除

"test": {
    "codeCoverage": {
      "exclude": [
        "src/assets/jqwidgets/**/*",
        "src/assets/jqwidgets-ts/**/*"
      ]
    },

答案 2 :(得分:0)

有一个属性可以将特定文件排除在覆盖范围之外,请参阅以下来自angular.json文件的代码

`"test": {
  "builder": "@angular-devkit/build-angular:karma",
  "options": {
    "main": "src/test.ts",
    ...
    "codeCoverageExclude": [
      "src/app/in-memory-data.service.ts",
      "src/test-util/stubs.ts",
      "src/testing/**/*"
    ]
  }
}`

“ codeCoverageExclude”属性将排除其中提到的文件。

还请参阅此以获取受支持的参数- https://github.com/angular/angular-cli/blob/v6.0.0-rc.8/packages/%40angular/cli/lib/config/schema.json#L1065-L1267