Настройка karma-jasmine

Karma является инструментом для запуска тестов в реальном браузере, который помогает интегрировать тестирование с различными инструментами и фреймворками. Jasmine, в свою очередь, представляет собой популярный фреймворк для юнит-тестирования на языке JavaScript. Интеграция Karma и Jasmine позволяет настроить среду для автоматического тестирования JavaScript-кода в браузерах с использованием мощных инструментов, таких как Chrome, Firefox, Safari, и других. Рассмотрим процесс настройки этой связки для эффективного тестирования приложений.

Установка зависимостей

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

  1. Karma - сам тест-раннер, который будет выполнять тесты в браузере.
  2. Jasmine - тестовый фреймворк, который позволяет писать тесты.
  3. karma-jasmine - плагин, который интегрирует Karma с Jasmine.
  4. karma-chrome-launcher (или другие браузерные лаунчеры) - плагин для запуска тестов в браузере.

Чтобы установить необходимые зависимости, нужно использовать npm:

npm install --save-dev karma karma-jasmine karma-chrome-launcher jasmine-core

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

Конфигурация Karma

Karma требует конфигурационного файла, в котором указываются все настройки тестирования, такие как браузеры для тестирования, пути к исходным файлам и тестам, а также плагины, которые будут использоваться. Чтобы создать файл конфигурации, можно использовать команду:

npx karma init

Этот процесс автоматически предложит несколько опций для настройки файла karma.conf.js, в котором можно будет указать:

  1. Конфигурация фреймворка: в нашем случае это будет Jasmine.
  2. Браузеры: Karma позволяет настроить запуск тестов в нескольких браузерах одновременно.
  3. Файлы и пути: сюда добавляются пути к тестовым файлам и основным скриптам.
  4. Плагины: Karma поддерживает различные плагины для расширения функционала.

Пример файла конфигурации:

module.exports = function(config) {
  config.set({
    // Фреймворк, который будет использоваться для тестирования
    frameworks: ['jasmine'],
    
    // Браузеры, которые будут использоваться для тестирования
    browsers: ['Chrome'],
    
    // Пути к исходным файлам и тестам
    files: [
      'src/**/*.js',
      'test/**/*.spec.js'
    ],
    
    // Плагины для Karma
    plugins: [
      'karma-jasmine',
      'karma-chrome-launcher'
    ],
    
    // Автоматическое повторное выполнение тестов при изменении файлов
    autoWatch: true,
    
    // Порт, на котором будет запущен сервер Karma
    port: 9876
  });
};

Структура проекта

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

  • src/ — папка с исходным кодом JavaScript.
  • test/ — папка с тестами, где каждый файл тестов соответствует одному файлу исходного кода (например, myModule.js и myModule.spec.js).

Пример структуры проекта:

/project
  /src
    myModule.js
  /test
    myModule.spec.js
  karma.conf.js
  package.json

Написание тестов с использованием Jasmine

Jasmine предоставляет мощный и простой API для написания тестов. В файле тестов (например, myModule.spec.js) можно использовать следующие основные функции:

  1. describe: группировка тестов.
  2. it: описание отдельных тестов.
  3. expect: проверки значений.

Пример теста:

describe('myModule', function() {
  it('должен возвращать правильный результат при сложении двух чисел', function() {
    var result = add(2, 3);
    expect(result).toBe(5);
  });
});

Здесь describe создаёт группу тестов, а it описывает конкретный тест, который проверяет работу функции add.

Запуск тестов с использованием Karma

После того как файл конфигурации Karma настроен, а тесты написаны, можно запустить тесты с помощью следующей команды:

npx karma start

Karma откроет указанные браузеры и выполнит тесты. При этом будет выводиться информация о том, какие тесты прошли, а какие — нет.

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

Поддержка нескольких браузеров

Karma позволяет настроить тестирование в нескольких браузерах одновременно, что значительно повышает качество тестов. Чтобы добавить поддержку нескольких браузеров, нужно указать их в конфигурации:

browsers: ['Chrome', 'Firefox']

Так Karma будет запускать тесты сначала в одном браузере, а затем — в другом. Также можно настроить использование различных лаунчеров, например, для Safari или Edge.

Совместимость с CI-системами

Karma легко интегрируется с различными системами непрерывной интеграции, такими как Jenkins, Travis CI, CircleCI и другими. Для работы с CI нужно настроить Karma так, чтобы она автоматически запускала тесты в режиме “headless” (без GUI), например, с использованием headless-версии Chrome.

Для этого можно использовать следующий плагин:

npm install --save-dev karma-chrome-launcher

Затем в конфигурации Karma указать ChromeHeadless:

browsers: ['ChromeHeadless']

Это позволит запускать тесты на сервере без необходимости открывать браузерный интерфейс.

Заключение

Karma и Jasmine образуют мощный набор для тестирования JavaScript-приложений. С их помощью можно легко настроить тестовую среду, запускать тесты в различных браузерах и интегрировать процесс с системами CI. Правильная настройка Karma позволяет обеспечить высокое качество кода, повысить уверенность в стабильности проекта и ускорить процесс разработки.