web-dev-qa-db-fra.com

Comment exclure des fichiers fictifs de la couverture de code Istanbul Reporter

J'ai une question concernant Istanbul Reporter utilisé pour signaler ma couverture de tests unitaires dans mon angular 6 application.

Mon problème est: lorsque la couverture est rendue, je vois les maquettes dans la liste des fichiers testés et, évidemment, les maquettes ne sont pas testées, ce qui me donne des statistiques de couverture erronées.

Ceci est ma configuration de fichier karma.conf par un collègue et je voudrais savoir si vous avez une idée sur la façon d'exclure ces fichiers fictifs.

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'), reports: [ 'html', 'lcovonly' ],
      fixWebpackSourcePaths: true
    },
    angularCli: {
      environment: 'local'
    },
    reporters: ['progress', 'kjhtml'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome'],
    singleRun: false
  });
};

J'ai vu sur StackOverflow que cela pourrait être fait en ajoutant une exclusion dans tsconfig.spec.json mais même en réexécutant la couverture du code, il les inclut toujours.

{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "outDir": "../../out-tsc/spec",
    "module": "commonjs",
    "types": [
      "jasmine",
      "node"
    ],
    "typeRoots": [ "../node_modules/@types" ]
  },
  "files": [
    "src/test.ts",
    "src/polyfills.ts"
  ],
  "include": [
    "**/*.spec.ts",
    "**/*.d.ts"
  ],
  "exclude": [
    "/**/*mock*.ts"
  ]
}

Mes fichiers fictifs sont à l'intérieur du dossier tests/mocks dans chaque module/fonctionnalité et sont appelés "mock-whatevertheymock.ts"

La commande pour l'exécuter est

test:wc-dogs": "ng test --project=wc-dogs--code-coverage

Merci pour l'aide

8
Dinosan0908

Merci à tous, la solution a été d'ajouter l'option codeCoverageExclude dans angular.json

   "test": {
              "builder": "@angular-devkit/build-angular:karma",
              "options": {
                "main": "projects/wc-claims/src/test.ts",
                "polyfills": "projects/wc-claims/src/polyfills.ts",
                "tsConfig": "projects/wc-claims/tsconfig.spec.json",
                "karmaConfig": "projects/wc-claims/karma.conf.js",
                "styles": [
                  "projects/wc-claims/src/styles.css"
                ],
                "scripts": [],
                "assets": [
                  "projects/wc-claims/src/favicon.ico",
                  "projects/wc-claims/src/assets"
                ],
                "codeCoverageExclude": [
                    "/**/*mock*.ts"
                ]
              }
            },
14
Dinosan0908

Vous devez ajouter l'exclusion à la configuration du karma.

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'), reports: [ 'html', 'lcovonly' ],
      fixWebpackSourcePaths: true
    },
    angularCli: {
      environment: 'local'
    },
    reporters: ['progress', 'kjhtml'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome'],
    exclude: ["/**/*mock*.ts"],
    singleRun: false
  });
};
0
Shubham Gupta