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

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

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

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

/my-project
  ├── /src
  ├── /tests
  ├── /node_modules
  ├── /dist
  ├── package.json
  └── .gitlab-ci.yml
  • /src — каталог с исходным кодом приложения.
  • /tests — каталог для юнит-тестов.
  • package.json — файл конфигурации для npm, который будет включать все зависимости, включая Jasmine.
  • .gitlab-ci.yml — файл конфигурации для GitLab CI, в котором будут определяться этапы для тестирования.

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

Перед тем как настроить GitLab CI, необходимо подготовить локальную среду для тестирования с использованием Jasmine.

  1. Инициализация проекта Если проект еще не инициализирован с использованием npm, нужно выполнить команду:

    npm init -y
  2. Установка Jasmine Для установки Jasmine в проект используется npm:

    npm install --save-dev jasmine
  3. Инициализация Jasmine После установки Jasmine нужно выполнить команду для создания начальной конфигурации:

    npx jasmine init

    Это создаст необходимые файлы, такие как spec/support/jasmine.json, которые можно будет использовать для настройки самого фреймворка.

Настройка конфигурации для GitLab CI

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

Пример конфигурации .gitlab-ci.yml:

stages:
  - test

test:
  image: node:16
  script:
    - npm install
    - npm run test
  only:
    - merge_requests
    - master

Разберем ключевые моменты конфигурации:

  • stages — определяет последовательность этапов в процессе CI. В данном случае предусмотрен только один этап — test.
  • image — указывает Docker-образ, который будет использоваться для запуска тестов. В данном случае используется официальный образ с Node.js версии 16.
  • script — список команд, которые выполняются на этапе. Сначала выполняется npm install, который устанавливает все зависимости проекта, затем — npm run test, который запускает тесты. Этот скрипт предполагает, что в package.json уже добавлена команда для тестирования.
  • only — указывает, что данная конфигурация CI будет активироваться только для слияния в master или для создания merge-запросов.

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

После того как настроен основной проект и CI, необходимо добавить сами тесты. Для этого создадим файлы тестов в папке /tests. Каждый файл теста должен содержать описание поведения функций или классов, которые подлежат тестированию.

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

describe("Моя функция", () => {
  it("должна возвращать правильное значение", () => {
    const result = myFunction(2, 3);
    expect(result).toBe(5);
  });

  it("должна обрабатывать негативные числа", () => {
    const result = myFunction(-2, -3);
    expect(result).toBe(-5);
  });
});

В данном примере мы тестируем гипотетическую функцию myFunction. Тесты описаны с использованием синтаксиса Jasmine, где:

  • describe — группа тестов, описывающая функциональность.
  • it — описание конкретного теста.
  • expect — утверждение, которое проверяет результат выполнения функции.

Тесты могут быть более сложными, включая асинхронные операции, работу с моками или шпионами, но принцип остается тем же.

Настройка скрипта для запуска тестов

Чтобы запускать тесты при помощи команды npm run test, нужно добавить соответствующий скрипт в package.json. Например:

{
  "scripts": {
    "test": "jasmine"
  }
}

Теперь при запуске npm run test будет автоматически выполнен Jasmine, который проверит все тесты, расположенные в папке tests.

Запуск тестов в GitLab CI

После того как проект и GitLab CI настроены, можно отправить изменения в репозиторий. Когда код будет отправлен в ветку, которая настроена для запуска CI (например, master или ветка merge-запроса), GitLab CI выполнит процесс сборки и тестирования, включая запуск Jasmine.

Чтобы проверить результаты тестов, можно открыть раздел CI/CD > Pipelines в интерфейсе GitLab. В нем будет отображена информация о каждом этапе, включая успешное или неудачное выполнение тестов.

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

Оптимизация конфигурации

Для более сложных проектов, где тесты могут занимать много времени, стоит настроить параллельный запуск тестов, разделив их на несколько jobs в .gitlab-ci.yml. Это может выглядеть следующим образом:

stages:
  - test

test:
  image: node:16
  script:
    - npm install
    - npm run test
  parallel:
    matrix:
      - TEST_ENV: "development"
      - TEST_ENV: "production"

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

Заключение

Настройка Jasmine в GitLab CI позволяет автоматизировать процесс тестирования JavaScript-приложений, обеспечивая высокую степень уверенности в стабильности кода. Конфигурация требует лишь базовых знаний GitLab CI и самого Jasmine, но открывает большие возможности для интеграции тестирования в процесс CI/CD.