GitHub Actions — это мощный инструмент для автоматизации процессов CI/CD, позволяющий запускать тесты, сборки и деплой прямо в репозитории. Использование Jest с GitHub Actions позволяет интегрировать тестирование в процесс разработки и улучшить качество кода за счет автоматической проверки.
Для того чтобы настроить тестирование с Jest в GitHub Actions,
необходимо создать файл конфигурации рабочего процесса в вашем
репозитории. Рабочий процесс представляет собой YAML-файл, который
описывает действия, которые должны быть выполнены в ответ на события в
репозитории (например, пуши, пул-реквесты). Эти файлы обычно размещаются
в директории .github/workflows.
Пример минимальной конфигурации для запуска тестов с Jest:
name: Run Jest Tests
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Install dependencies
run: |
npm install
- name: Run tests with Jest
run: |
npm run test
main.test.actions/checkout происходит клонирование репозитория в
контейнер, в котором будет выполняться процесс.actions/setup-node для установки нужной версии Node.js (в
примере — версия 16).npm install.npm run test, которая должна быть настроена в вашем
проекте для запуска Jest.GitHub Actions предоставляет несколько типов виртуальных окружений для запуска рабочих процессов. Для запуска тестов с Jest предпочтительно использовать последние версии Node.js и Ubuntu, так как они обеспечивают стабильность и совместимость с большинством пакетов.
В файле конфигурации можно указать более точные параметры для Node.js, например, устанавливать не только саму версию Node, но и менеджер пакетов, если это необходимо:
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
cache: 'npm'
Это позволит кэшировать зависимости и ускорить выполнение тестов на последующих запусках.
GitHub Actions позволяет кэшировать директории и файлы, что помогает
ускорить выполнение CI/CD процессов. В случае с проектами на Node.js
можно кэшировать папку node_modules, чтобы избежать
повторной установки зависимостей.
Добавление кэширования:
- name: Cache node modules
uses: actions/cache@v3
with:
path: node_modules
key: ${{ runner.os }}-node-modules-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-modules-
node_modules.package-lock.json гарантирует, что кеш будет обновляться
при изменении зависимостей.Если тесты требуют специфической конфигурации для работы в GitHub Actions, можно использовать несколько параметров в конфигурации Jest:
CI=true, что отключает
интерактивные запросы и уведомления, такие как требование нажатия
клавиш. Это важно для бесшовного процесса тестирования. - name: Run tests with Jest
run: |
CI=true npm run test
--coverage. Важно,
чтобы результаты покрытия выводились в формате, совместимом с GitHub
Actions. - name: Run tests with coverage
run: |
npm run test -- --coverage
GitHub Actions поддерживает отображение отчётов о тестах, что позволяет анализировать результаты тестирования прямо в интерфейсе. Для этого можно использовать несколько подходов:
Для этого нужно установить соответствующий пакет:
npm install jest-junit --save-dev
И в package.json добавить настройку для Jest:
"jest": {
"reporters": [
"default",
["jest-junit", { "outputDirectory": "test-reports", "outputName": "jest-test-report.xml" }]
]
}
После этого можно будет добавить шаг для загрузки отчёта в процессе GitHub Actions:
- name: Upload Jest test report
uses: actions/upload-artifact@v3
with:
name: jest-test-report
path: test-reports/jest-test-report.xml
Этот шаг загрузит отчёт в формате XML, который можно будет просматривать в интерфейсе GitHub Actions.
Для улучшения отслеживания проблем с тестами можно использовать
дополнительные шаги для логирования. GitHub Actions позволяет выводить
кастомные сообщения в логи с помощью команды echo.
Пример добавления логирования в шаги:
- name: Log test results
run: |
echo "Starting Jest tests..."
CI=true npm run test
echo "Jest tests completed."
Также можно интегрировать уведомления через Slack или email с помощью стандартных действий или через собственные вебхуки.
В некоторых случаях тесты могут требовать специфического окружения, которое не всегда удобно настраивать в стандартном контейнере GitHub Actions. В этом случае можно использовать Docker.
Пример конфигурации с Docker:
jobs:
test:
runs-on: ubuntu-latest
services:
- name: docker:19.03.12
options: --privileged
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Build Docker container
run: docker build -t my-app .
- name: Run Jest tests in Docker
run: docker run --rm my-app npm run test
Здесь контейнер Docker собирается из вашего репозитория и используется для запуска тестов, что помогает создавать полностью изолированные и повторяемые тестовые среды.
GitHub Actions позволяет вам настраивать поведение рабочего процесса при возникновении ошибок. Например, можно настроить выполнение дальнейших шагов только в случае успешного завершения предыдущих. Это полезно для случаев, когда тесты не должны прерывать весь процесс сборки.
- name: Run tests
run: npm run test
continue-on-error: false
Настройка continue-on-error: false гарантирует, что
последующие шаги не будут выполняться, если тесты не пройдут
успешно.
Конфигурация Jest для GitHub Actions — это важный этап интеграции автоматических тестов в процесс CI/CD. Подходящая настройка окружения, кэширования зависимостей, отчётов и других аспектов помогает ускорить процесс тестирования и повысить его эффективность. GitHub Actions предоставляет гибкие возможности для автоматизации тестирования, позволяя минимизировать человеческий фактор и повышать качество кода на протяжении всего жизненного цикла разработки.