Coverage reporter

Coverage reporter в Karma — это инструмент для измерения покрытия кода тестами, который позволяет понять, какие части приложения реально проверяются в тестах, а какие остаются неиспользованными. Он интегрируется с популярными инструментами анализа покрытия, такими как Istanbul и его форки, и предоставляет подробную статистику по строкам, функциям и ветвлениям кода.

Настройка coverage reporter

Для начала необходимо установить пакет, обеспечивающий генерацию отчётов покрытия:

npm install karma-coverage --save-dev

В конфигурационном файле karma.conf.js coverage reporter подключается следующим образом:

module.exports = function(config) {
  config.set({
    frameworks: ['jasmine'], // или mocha, qunit и др.
    files: [
      'src/**/*.js',
      'test/**/*.spec.js'
    ],
    preprocessors: {
      'src/**/*.js': ['coverage']
    },
    reporters: ['progress', 'coverage'],
    coverageReporter: {
      type : 'html',        // формат отчета: html, lcov, text, text-summary
      dir : 'coverage/',    // папка для хранения отчета
      includeAllSources: true
    }
  });
};

Ключевые параметры:

  • type — формат отчета. html создаёт интерактивный веб-отчёт, lcov подходит для CI и интеграции с SonarQube, text и text-summary выводят отчет в консоль.
  • dir — директория для сохранения файлов отчета.
  • includeAllSources — учитывает все файлы, даже если они не были импортированы в тестах.

Препроцессоры

Для работы coverage reporter требуется, чтобы исходный код проходил через препроцессор coverage. Это необходимо, чтобы инструмент мог вставить специальные счётчики в код, отслеживающие выполнение каждой строки и функции.

Пример настройки препроцессора:

preprocessors: {
  'src/**/*.js': ['coverage']
}

Можно комбинировать несколько препроцессоров, например, для транспиляции через Babel:

preprocessors: {
  'src/**/*.js': ['babel', 'coverage']
}

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

Типы отчётов покрытия

  1. HTML — интерактивный веб-отчет с подсветкой непокрытых строк.
  2. LCOV — текстовый отчет в формате lcov, подходящий для CI и интеграции с внешними системами анализа.
  3. Text / Text-summary — выводит краткую сводку в консоль.
  4. Cobertura — XML-формат для совместимости с некоторыми CI/CD системами.

Можно указать несколько типов одновременно:

coverageReporter: {
  reporters: [
    { type: 'html', dir: 'coverage/html' },
    { type: 'lcov', dir: 'coverage/lcov' },
    { type: 'text-summary' }
  ]
}

Погружение в отчёты

HTML-отчёт позволяет детально увидеть покрытие:

  • Green — строки, полностью покрытые тестами.
  • Red — строки, которые не были выполнены ни разу.
  • Yellow — строки частично покрытые (например, условие if выполнено не для всех веток).

В текстовом отчете выводятся статистические показатели:

  • Statements — покрытие всех операторов.
  • Branches — покрытие всех ветвлений (if/else, switch/case).
  • Functions — процент тестируемых функций.
  • Lines — процент проверенных строк кода.

Интеграция с CI/CD

Для автоматического контроля покрытия можно настроить CI, чтобы сборка падала при недостаточном покрытии. Karma поддерживает параметры check, позволяющие задать минимальные пороги:

coverageReporter: {
  check: {
    global: {
      statements: 80,
      branches: 70,
      functions: 80,
      lines: 80
    },
    each: {
      statements: 70,
      branches: 60,
      functions: 70,
      lines: 70
    }
  }
}
  • global — проверка на уровне всего проекта.
  • each — проверка на уровне каждого файла.

Если порог не достигнут, тесты возвращают ошибку, что предотвращает выпуск недокументированного кода.

Советы по использованию

  • Всегда комбинировать coverage с препроцессором для транспиляции, если используется ES6+ или TypeScript.
  • Включать includeAllSources, чтобы видеть покрытие всех модулей, а не только тех, что импортированы в тестах.
  • Использовать несколько типов отчётов для локального анализа и интеграции с CI.
  • Анализировать непокрытые строки через HTML-отчет для точечной доработки тестов.

Coverage reporter в Karma позволяет не только измерять эффективность тестов, но и выстраивать строгую дисциплину разработки, обеспечивая прозрачность и контроль над качеством кода.