Настройка в CircleCI

CircleCI представляет собой платформу для автоматической интеграции и доставки, которая значительно облегчает процесс тестирования и развертывания приложений. Для того чтобы интегрировать тесты, написанные с использованием Mocha, в этот процесс, необходимо настроить рабочие процессы так, чтобы тесты выполнялись автоматически при каждом коммите или push’е в репозиторий. В этом разделе рассмотрим, как настроить окружение для выполнения Mocha-тестов в CircleCI.

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

Перед тем как приступить к настройке CircleCI, важно правильно организовать структуру проекта. Типичная структура проекта, в котором используются Mocha и CircleCI, может выглядеть так:

/my-app
  /node_modules
  /test
    test1.js
    test2.js
  package.json
  .circleci
    config.yml
  • test/ — директория, содержащая тесты Mocha.
  • package.json — файл, в котором указаны зависимости проекта, включая Mocha.
  • .circleci/config.yml — конфигурационный файл CircleCI, который описывает процессы сборки, тестирования и развертывания.

Установка Mocha

Для того чтобы запустить Mocha-тесты в CircleCI, необходимо убедиться, что Mocha и другие зависимости установлены в проекте. Для этого нужно добавить Mocha в список зависимостей:

npm install --save-dev mocha

Если проект использует какие-либо дополнительные библиотеки, такие как chai для утверждений или sinon для мокирования, их также следует установить:

npm install --save-dev chai sinon

Конфигурация CircleCI

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

Разбор конфигурации

  1. executors: В данном примере используется docker-образ cimg/node:16.13, который предоставляет среду Node.js версии 16.13. Это гарантирует, что тесты будут выполняться в окружении с необходимыми версиями зависимостей.

  2. jobs:

    • install_dependencies — в этом шаге происходит клонирование репозитория и установка всех зависимостей с помощью команды npm install.
    • test — после того как зависимости установлены, происходит выполнение тестов с помощью команды npm test.
  3. workflows: В разделе workflows описан порядок выполнения задач. Сначала выполняется шаг install_dependencies, а затем — шаг test, который зависит от завершения установки зависимостей.

Запуск тестов в CircleCI

После того как файл .circleci/config.yml настроен, необходимо добавить команду для запуска тестов в скрипт npm test. Это делается путем добавления в файл package.json раздела scripts:

{
  "scripts": {
    "test": "mocha"
  }
}

Теперь, каждый раз при пуше в репозиторий, CircleCI будет автоматически запускать команду npm test, которая вызовет Mocha для выполнения тестов.

Убедитесь в правильности выполнения

После коммита изменений и пуша в репозиторий, CircleCI автоматически начнёт выполнение pipeline. Результаты можно будет увидеть в интерфейсе CircleCI. Если тесты пройдут успешно, в отчете будет отображаться сообщение о том, что все тесты прошли. В случае ошибок тестирования можно будет сразу увидеть, какие именно тесты не прошли, и будет доступен подробный лог ошибок.

Дополнительные настройки

  1. Архивирование артефактов: В некоторых случаях полезно хранить логи тестирования для дальнейшего анализа. Это можно сделать с помощью функционала артефактов CircleCI:
jobs:
  test:
    executor: node-executor
    steps:
      - checkout
      - run:
          name: Запуск тестов Mocha
          command: npm test
      - store_artifacts:
          path: test-results
          destination: test-results

Этот шаг сохраняет результаты тестирования в виде артефактов, которые можно просмотреть в интерфейсе CircleCI после завершения pipeline.

  1. Кэширование зависимостей: Чтобы ускорить выполнение 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, и грамотное использование этих инструментов позволит существенно ускорить разработку и повысить надежность приложения.