Как указать папку, в которую я хочу включить файлы для покрытия кода в угловых? - PullRequest
0 голосов
/ 09 июля 2019

Я использую жасмин и карму для юнит-тестирования. Стамбульский репортер.

Я хочу указать, какая папка должна рассматриваться для покрытия кода. Я хочу исключить все остальное.

Сейчас я совершенно не понимаю, как работает конфигурация. основная папка - единственная папка, которую я хочу рассмотреть для покрытия кода. (пришлось вставить скриншот, потому что брандмауэр не позволяет загружать изображения)

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

EDIT:

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 ]

1 голос
/ 09 июля 2019

В папке src настройте свой test.js так, чтобы он указывал только на папку, которую вы хотите запустить test

// Then we find all the tests.
const context = require.context('./app/folderyouwantoruntestcas', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);
1 голос
/ 10 июля 2019

Как указывал @Chellappan, фреймворк включал библиотеку в покрытие кода.Потому что на него ссылались в одном из моих компонентов.Мне удалось исключить его из покрытия кода с помощью следующего в angular-cli.json

"test": {
    "codeCoverage": {
      "exclude": [
        "src/assets/jqwidgets/**/*",
        "src/assets/jqwidgets-ts/**/*"
      ]
    },
0 голосов
/ 09 июля 2019

Существует свойство для исключения конкретного файла из покрытий, см. Ниже код из файла 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...