Настройка в GitLab CI

Mocha — это один из самых популярных фреймворков для тестирования на языке JavaScript. Он предоставляет мощные возможности для написания модульных и интеграционных тестов, а также поддерживает асинхронные тесты, что делает его идеальным выбором для большинства проектов. Для эффективного тестирования в CI/CD средах, таких как GitLab CI, необходимо правильно настроить автоматический запуск тестов при каждом изменении кода. В этой главе рассматривается процесс настройки Mocha в GitLab CI, чтобы тесты выполнялись автоматически в рамках конвейера.

Основные компоненты GitLab CI

Перед тем как настроить Mocha в GitLab CI, важно понимать ключевые компоненты системы CI:

  • .gitlab-ci.yml — основной конфигурационный файл, который содержит описание всех этапов и задач для выполнения.
  • Runner — агент, который выполняет задачи в CI/CD pipeline. GitLab предоставляет несколько типов runner’ов, включая shared и custom runners.
  • Pipeline — набор этапов (jobs), которые GitLab выполняет по очереди или параллельно.

Подготовка окружения

Для начала необходимо убедиться, что проект содержит все необходимые зависимости для работы с Mocha. Это включает в себя сам Mocha и инструменты для запуска тестов, например, chai для утверждений, если используется.

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

    npm install --save-dev mocha chai
  2. Проверка корректности установки:

    В корневой директории проекта должен быть файл, например, test.js, в котором находятся простые тесты:

    const assert = require('chai').assert;
    
    describe('Простой тест', function () {
        it('должен быть равен 2', function () {
            assert.equal(1 + 1, 2);
        });
    });

    Запустив Mocha локально, убедитесь, что тесты выполняются:

    npx mocha

Создание .gitlab-ci.yml

Для автоматического запуска тестов Mocha в GitLab CI необходимо создать файл .gitlab-ci.yml в корне проекта. Этот файл будет описывать шаги, которые нужно выполнить при каждом изменении кода.

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

stages:
  - test

test:
  image: node:16
  stage: test
  script:
    - npm install
    - npx mocha
  artifacts:
    paths:
      - test-results

Здесь:

  • stages — определяет этапы конвейера. В данном случае у нас есть только один этап — тестирование.
  • image — указывает на используемый образ Docker, в котором будет работать runner. В данном случае это официальный образ Node.js версии 16.
  • stage — указывает, на какой стадии конвейера выполняется этот job (тестирование).
  • script — список команд, которые будут выполнены в рамках этого job. Мы устанавливаем зависимости и запускаем тесты.
  • artifacts — сохраняет результаты тестирования (если они были определены в процессе выполнения). В данном случае результат сохраняется в папке test-results.

Подробности конфигурации

Для более точной настройки работы с Mocha в GitLab CI можно использовать несколько дополнительных параметров и возможностей:

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

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

Например, для запуска тестов с определённым репортером или флагами Mocha, конфигурация может выглядеть так:

test:
  image: node:16
  stage: test
  script:
    - npm install
    - npx mocha --reporter spec --timeout 5000

Здесь:

  • --reporter spec — указывает использовать репортер spec, который предоставляет детализированные выводы о выполнении тестов.
  • --timeout 5000 — задаёт максимальное время на выполнение одного теста в миллисекундах (5 секунд).

Генерация отчетов о тестах

Для улучшенной интеграции с GitLab CI и создания отчетов о выполнении тестов можно настроить Mocha для вывода результатов в формате JUnit, который GitLab понимает и может отображать как артефакты.

Для этого потребуется использовать репортер mocha-junit-reporter.

  1. Установка репортера:

    npm install --save-dev mocha-junit-reporter
  2. Обновление конфигурации Mocha в .gitlab-ci.yml:

    test:
      image: node:16
      stage: test
      script:
        - npm install
        - npx mocha --reporter mocha-junit-reporter --reporter-options mochaFile=test-results/test-report.xml
      artifacts:
        paths:
          - test-results/test-report.xml
        expire_in: 1 week

В этом примере результаты тестов будут сохраняться в файл test-results/test-report.xml, который затем будет доступен для анализа через интерфейс GitLab.

Параллельное выполнение тестов

GitLab CI позволяет параллельно выполнять несколько job’ов. Это особенно полезно, если тестов много и их выполнение требует значительных временных затрат. Для этого можно разделить тесты на несколько групп и запускать их одновременно.

Пример конфигурации для параллельного выполнения:

stages:
  - test

test_unit:
  image: node:16
  stage: test
  script:
    - npm install
    - npx mocha test/unit/*.js
  artifacts:
    paths:
      - test-results/unit
    expire_in: 1 week

test_integration:
  image: node:16
  stage: test
  script:
    - npm install
    - npx mocha test/integration/*.js
  artifacts:
    paths:
      - test-results/integration
    expire_in: 1 week

В этом примере тесты делятся на два набора — юнит-тесты и интеграционные тесты, которые выполняются параллельно.

Использование кеширования

Для ускорения выполнения CI/CD pipeline можно использовать кеширование зависимостей. GitLab предоставляет возможность кэшировать директории и файлы между пайплайнами, что ускоряет установку пакетов.

Пример конфигурации с кешированием:

stages:
  - test

test:
  image: node:16
  stage: test
  cache:
    paths:
      - node_modules/
  script:
    - npm install
    - npx mocha

Здесь кэшируется папка node_modules, чтобы при повторном запуске pipeline зависимости не скачивались заново.

Ручной запуск тестов

Если необходимо выполнять тесты не автоматически, а вручную, можно добавить специальный параметр для запуска через GitLab UI.

Пример:

test:
  image: node:16
  stage: test
  script:
    - npm install
    - npx mocha
  when: manual

В этом случае тесты будут запускаться только по запросу пользователя через интерфейс GitLab, а не автоматически при каждом коммите.

Завершение настройки

Теперь GitLab CI настроен для автоматического выполнения тестов с использованием Mocha. Важно помнить, что успешная настройка требует правильного выполнения всех команд в пайплайне, включая установку зависимостей и запуск тестов в нужной среде. Следует также учитывать, что различные типы репортеров и способов хранения артефактов могут изменять вывод и доступность данных для дальнейшего анализа.