В настоящее время я работаю над проектом, в котором мы хотим иметь покрытие кода для наших модульных тестов.
Тесты проходят нормально, но у меня есть некоторые проблемы с получением правильного покрытия.
Наш 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 / ....) и их документ довольно свет.
Что я делаю не так? Как я могу это исправить?