Mocha — это один из самых популярных фреймворков для тестирования на языке JavaScript. Он предоставляет мощные возможности для написания модульных и интеграционных тестов, а также поддерживает асинхронные тесты, что делает его идеальным выбором для большинства проектов. Для эффективного тестирования в CI/CD средах, таких как GitLab CI, необходимо правильно настроить автоматический запуск тестов при каждом изменении кода. В этой главе рассматривается процесс настройки Mocha в GitLab CI, чтобы тесты выполнялись автоматически в рамках конвейера.
Перед тем как настроить Mocha в GitLab CI, важно понимать ключевые компоненты системы CI:
.gitlab-ci.yml — основной
конфигурационный файл, который содержит описание всех этапов и задач для
выполнения.Для начала необходимо убедиться, что проект содержит все необходимые
зависимости для работы с Mocha. Это включает в себя сам Mocha и
инструменты для запуска тестов, например, chai для
утверждений, если используется.
Установка зависимостей:
npm install --save-dev mocha chaiПроверка корректности установки:
В корневой директории проекта должен быть файл, например,
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
Здесь:
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.
Установка репортера:
npm install --save-dev mocha-junit-reporterОбновление конфигурации 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. Важно помнить, что успешная настройка требует правильного выполнения всех команд в пайплайне, включая установку зависимостей и запуск тестов в нужной среде. Следует также учитывать, что различные типы репортеров и способов хранения артефактов могут изменять вывод и доступность данных для дальнейшего анализа.