CircleCI представляет собой платформу для автоматической интеграции и доставки, которая значительно облегчает процесс тестирования и развертывания приложений. Для того чтобы интегрировать тесты, написанные с использованием Mocha, в этот процесс, необходимо настроить рабочие процессы так, чтобы тесты выполнялись автоматически при каждом коммите или push’е в репозиторий. В этом разделе рассмотрим, как настроить окружение для выполнения Mocha-тестов в CircleCI.
Перед тем как приступить к настройке CircleCI, важно правильно организовать структуру проекта. Типичная структура проекта, в котором используются Mocha и CircleCI, может выглядеть так:
/my-app
/node_modules
/test
test1.js
test2.js
package.json
.circleci
config.yml
Для того чтобы запустить Mocha-тесты в CircleCI, необходимо убедиться, что Mocha и другие зависимости установлены в проекте. Для этого нужно добавить Mocha в список зависимостей:
npm install --save-dev mocha
Если проект использует какие-либо дополнительные библиотеки, такие
как chai для утверждений или sinon для
мокирования, их также следует установить:
npm install --save-dev chai sinon
CircleCI использует файл конфигурации
.circleci/config.yml, в котором задаются все шаги для
выполнения различных задач. В данном случае необходимо настроить шаги
для установки зависимостей, запуска тестов и выполнения других
необходимых действий.
Пример конфигурационного файла CircleCI для выполнения тестов Mocha:
version: 2.1
executors:
node-executor:
docker:
- image: cimg/node:16.13
working_directory: ~/repo
jobs:
install_dependencies:
executor: node-executor
steps:
- checkout
- run:
name: Установка зависимостей
command: npm install
test:
executor: node-executor
steps:
- checkout
- run:
name: Запуск тестов Mocha
command: npm test
workflows:
version: 2
test:
jobs:
- install_dependencies
- test:
requires:
- install_dependencies
executors: В данном примере используется
docker-образ cimg/node:16.13, который
предоставляет среду Node.js версии 16.13. Это гарантирует, что тесты
будут выполняться в окружении с необходимыми версиями
зависимостей.
jobs:
npm install.npm test.workflows: В разделе workflows описан порядок
выполнения задач. Сначала выполняется шаг
install_dependencies, а затем — шаг test,
который зависит от завершения установки зависимостей.
После того как файл .circleci/config.yml настроен,
необходимо добавить команду для запуска тестов в скрипт
npm test. Это делается путем добавления в файл
package.json раздела scripts:
{
"scripts": {
"test": "mocha"
}
}
Теперь, каждый раз при пуше в репозиторий, CircleCI будет
автоматически запускать команду npm test, которая вызовет
Mocha для выполнения тестов.
После коммита изменений и пуша в репозиторий, CircleCI автоматически начнёт выполнение pipeline. Результаты можно будет увидеть в интерфейсе CircleCI. Если тесты пройдут успешно, в отчете будет отображаться сообщение о том, что все тесты прошли. В случае ошибок тестирования можно будет сразу увидеть, какие именно тесты не прошли, и будет доступен подробный лог ошибок.
jobs:
test:
executor: node-executor
steps:
- checkout
- run:
name: Запуск тестов Mocha
command: npm test
- store_artifacts:
path: test-results
destination: test-results
Этот шаг сохраняет результаты тестирования в виде артефактов, которые можно просмотреть в интерфейсе CircleCI после завершения pipeline.
jobs:
install_dependencies:
executor: node-executor
steps:
- checkout
- restore_cache:
keys:
- node-modules-{{ checksum "package-lock.json" }}
- node-modules-
- run:
name: Установка зависимостей
command: npm install
- save_cache:
paths:
- node_modules
key: node-modules-{{ checksum "package-lock.json" }}
Этот шаг восстанавливает кэш зависимостей на основе хеша файла
package-lock.json и сохраняет кэш после выполнения
установки зависимостей.
В случае если проект включает в себя большое количество тестов, может возникнуть необходимость разделить тесты на несколько этапов. Например, можно разделить тесты на юнит-тесты и интеграционные тесты и запускать их в отдельных джобах:
jobs:
unit_tests:
executor: node-executor
steps:
- checkout
- run:
name: Запуск юнит-тестов
command: npm run test:unit
integration_tests:
executor: node-executor
steps:
- checkout
- run:
name: Запуск интеграционных тестов
command: npm run test:integration
workflows:
version: 2
test:
jobs:
- unit_tests
- integration_tests:
requires:
- unit_tests
Этот подход позволяет более гибко управлять тестами, а также сокращать время выполнения pipeline, разделяя тесты на более мелкие части.
Правильная настройка Mocha в CircleCI требует создания эффективного процесса автоматического тестирования, включающего установку зависимостей, запуск тестов и архивацию результатов. CircleCI предоставляет мощные инструменты для управления процессами CI/CD, и грамотное использование этих инструментов позволит существенно ускорить разработку и повысить надежность приложения.