Получите покрытие Cobertura из приложения angular5 в машинописном тексте - PullRequest
0 голосов
/ 04 мая 2018

В настоящее время я работаю над проектом, в котором мы хотим иметь покрытие кода для наших модульных тестов. Тесты проходят нормально, но у меня есть некоторые проблемы с получением правильного покрытия.

Наш CiCd работает в VSTS и запрашивает экспорт покрытия кода в Cobertura или JaCoCo, чтобы опубликовать результат.

Таким образом, наше приложение является приложением Angular 5, полностью написанным на TypeScript, со спецификационными файлами, встроенными в каждый компонент / модуль / ...

Наши тесты работают с кармой, жасмином, с хромом, и мой 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-istanbul-reporter'),
      require('@angular/cli/plugins/karma'),
      require('karma-junit-reporter'),
      require('karma-remap-coverage'),
      require('karma-coverage'),
    ],
    client:{
      clearContext: false // leave Jasmine Spec Runner output visible in browser
    },
    files: [
      { pattern: 'src/**/*.ts' }
    ],
    preprocessors: {
      './src/**/*.ts': ['coverage']
    },
    coverageIstanbulReporter: {
      reports: [ 'cobertura' ],
      fixWebpackSourcePaths: true
    },
    coverageReporter: {
      type: 'in-memory'
    },
    remapOptions: {
      basePath: './src'
    },
    remapIstanbulReporter: {
      reports: {
        html: 'coverage',
        cobertura: './coverage/cobertura.xml',
      }
    },
    remapCoverageReporter: {
      'text-summary': null, // to show summary in console
      html: './coverage/html',
      cobertura: './coverage/cobertura.xml'
    },
    angularCli: {
      config: './angular-cli.json',
      environment: 'dev',
      codeCoverage: true
    },
    reporters: ['progress', 'junit', 'coverage', 'remap-coverage'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome'],
    singleRun: false,
    sourceMaps: true
  });
};

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

Меня беспокоит то, что покрытие кода ничего не делается, поскольку консоль выводит его в конце выполнения:

=============================== Coverage summary ===============================
Statements   : 100% ( 0/0 )
Branches     : 100% ( 0/0 )
Functions    : 100% ( 0/0 )
Lines        : 100% ( 0/0 )
================================================================================

Но я уверен, что мои тесты в порядке: Chrome 66.0.3359 (Mac OS X 10.12.6): выполнено 264 из 291 (пропущено 27) УСПЕХ (9,286 с / 0 с)

Также в начале запуска у меня много ошибок, показывающих:

04 05 2018 10:51:51.473:ERROR [preprocessor.coverage]: Line 1: Unexpected token
  at /Users/user/Documents/work/project/src/app/settings/settings.component.spec.ts
Failed to parse file: /Users/user/Documents/work/project/src/app/settings/settings.component.ts

Может быть, это может прийти отсюда? Но я не знаю, что это за ошибки и почему я их получаю.

В целом, мне было очень трудно найти хороший учебник по этому вопросу в Интернете, в котором много разных библиотек называют друг друга (karma / lighting / istanbul / karma-typcript / ....) и их документ довольно свет.

Что я делаю не так? Как я могу это исправить?

1 Ответ

0 голосов
/ 31 января 2019

Я не могу интерпретировать ошибку, которую вы получаете в settings.component.spec.ts. Но это причина, по которой вы получаете неправильное резюме покрытия. Всякий раз, когда полное выполнение тестов не происходит из-за ошибки, покрытие не рассчитывается, и вы получаете вышеуказанное резюме в покрытии.

...