Запуск через package.json

Karma — это тестовый раннер для JavaScript, который обеспечивает выполнение тестов в реальных браузерах и автоматическую интеграцию с различными фреймворками, такими как Jasmine, Mocha или QUnit. Один из ключевых способов управления запуском тестов — через скрипты в package.json. Этот подход позволяет стандартизировать запуск тестов и интегрировать его с CI/CD.


Добавление скрипта для Karma

Файл package.json содержит раздел scripts, где можно определить команды для запуска Karma. Простейший пример:

{
  "scripts": {
    "test": "karma start karma.conf.js"
  }
}

Здесь:

  • test — имя скрипта, которое можно вызвать командой npm test.
  • karma start karma.conf.js — команда запуска Karma с конфигурационным файлом karma.conf.js.

Использование npm test вместо прямого вызова Karma делает процесс универсальным и переносимым между командами разработчиков и средами CI/CD.


Передача параметров через скрипт

Karma позволяет передавать параметры командной строки для настройки поведения тестов. Например:

{
  "scripts": {
    "test": "karma start karma.conf.js --browsers ChromeHeadless --single-run"
  }
}
  • --browsers ChromeHeadless — запуск тестов в безголовом режиме Chrome.
  • --single-run — выполнение тестов один раз и завершение процесса, что особенно полезно для CI.

Можно комбинировать несколько опций:

{
  "scripts": {
    "test:watch": "karma start karma.conf.js --auto-watch --browsers Chrome",
    "test:ci": "karma start karma.conf.js --browsers ChromeHeadless --single-run --reporters junit"
  }
}
  • --auto-watch включает автоматический пересмотр файлов при изменении кода.
  • --reporters junit позволяет выводить результаты в формате JUnit, удобном для CI/CD.

Использование переменных окружения

Для более гибкой настройки можно использовать переменные окружения. Например:

{
  "scripts": {
    "test": "BROWSER=ChromeHeadless karma start karma.conf.js"
  }
}

В конфигурационном файле Karma можно считывать эти переменные:

module.exports = function(config) {
  const browser = process.env.BROWSER || 'Chrome';
  config.set({
    browsers: [browser],
    singleRun: true
  });
};

Такой подход позволяет запускать тесты в разных браузерах без изменения package.json и karma.conf.js.


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

Для интеграции с Jenkins, GitLab CI или GitHub Actions важно использовать режим --single-run и безголовый браузер:

{
  "scripts": {
    "test:ci": "karma start karma.conf.js --browsers ChromeHeadless --single-run --reporters junit,dots"
  }
}
  • dots выводит компактный лог выполнения тестов.
  • junit формирует XML-файл, который можно использовать в CI для отчетности.

CI-пайплайны обычно вызывают команду через npm run test:ci, что обеспечивает воспроизводимость и единый формат логов.


Разделение тестовых сценариев

Можно создавать отдельные скрипты для разных наборов тестов:

{
  "scripts": {
    "test:unit": "karma start karma.unit.conf.js --single-run",
    "test:e2e": "karma start karma.e2e.conf.js --single-run"
  }
}
  • karma.unit.conf.js — конфигурация для модульных тестов.
  • karma.e2e.conf.js — конфигурация для end-to-end тестирования.

Такое разделение повышает читаемость и удобство запуска в разных контекстах.


Настройка отчетов и логирования

Karma поддерживает множество репортеров. В скриптах package.json их можно комбинировать:

{
  "scripts": {
    "test": "karma start karma.conf.js --reporters progress,junit,coverage"
  }
}
  • progress — отображение прогресса выполнения тестов в консоли.
  • junit — формирует XML для CI.
  • coverage — генерирует отчёт о покрытии кода.

Можно указать директорию для отчетов прямо в конфигурации Karma:

coverageReporter: {
  type : 'html',
  dir : 'coverage/'
}

Параллельный запуск тестов

Karma позволяет запускать несколько браузеров одновременно. Это ускоряет тестирование больших проектов:

{
  "scripts": {
    "test:parallel": "karma start karma.conf.js --browsers ChromeHeadless,FirefoxHeadless --single-run"
  }
}

Конфигурация для CI может включать несколько браузеров и разные режимы отчётности, обеспечивая полное покрытие.


Итоговая структура package.json для проекта с Karma

{
  "scripts": {
    "test": "karma start karma.conf.js",
    "test:watch": "karma start karma.conf.js --auto-watch --browsers Chrome",
    "test:ci": "karma start karma.conf.js --browsers ChromeHeadless --single-run --reporters junit,dots",
    "test:unit": "karma start karma.unit.conf.js --single-run",
    "test:e2e": "karma start karma.e2e.conf.js --single-run",
    "test:parallel": "karma start karma.conf.js --browsers ChromeHeadless,FirefoxHeadless --single-run"
  }
}

Такое оформление скриптов позволяет гибко управлять тестированием, адаптировать запуск под локальную разработку, автоматическое наблюдение за изменениями и CI/CD.

Каждый скрипт можно адаптировать под конкретные задачи проекта, добавляя дополнительные опции командной строки или переменные окружения, сохраняя при этом единообразие и воспроизводимость тестового процесса.