Jasmine является одним из самых популярных фреймворков для тестирования JavaScript. Он предоставляет простой и гибкий способ для написания юнит-тестов, что делает его отличным инструментом для интеграции в процесс CI/CD. GitLab CI — это инструмент для автоматизации процессов тестирования, сборки и деплоя приложений, который позволяет настроить непрерывную интеграцию для проектов. В этой статье будет рассмотрена настройка Jasmine в окружении GitLab CI для выполнения тестов автоматически при каждом коммите.
Для начала необходимо правильно настроить проект, чтобы он был совместим с Jasmine и GitLab CI. Стандартная структура может выглядеть следующим образом:
/my-project
├── /src
├── /tests
├── /node_modules
├── /dist
├── package.json
└── .gitlab-ci.yml
Перед тем как настроить GitLab CI, необходимо подготовить локальную среду для тестирования с использованием Jasmine.
Инициализация проекта Если проект еще не инициализирован с использованием npm, нужно выполнить команду:
npm init -yУстановка Jasmine Для установки Jasmine в проект используется npm:
npm install --save-dev jasmineИнициализация Jasmine После установки Jasmine нужно выполнить команду для создания начальной конфигурации:
npx jasmine init
Это создаст необходимые файлы, такие как
spec/support/jasmine.json, которые можно будет использовать
для настройки самого фреймворка.
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
Разберем ключевые моменты конфигурации:
test.npm install, который
устанавливает все зависимости проекта, затем —
npm run test, который запускает тесты. Этот скрипт
предполагает, что в package.json уже добавлена команда для
тестирования.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 настроены, можно отправить
изменения в репозиторий. Когда код будет отправлен в ветку, которая
настроена для запуска 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.