Настройка на GitHub Actions

GitHub Actions позволяет автоматизировать процессы сборки, тестирования и развертывания приложений, обеспечивая интеграцию с GitHub. Для JavaScript проектов использование GitHub Actions с тестами на Jasmine помогает настроить непрерывную интеграцию, которая автоматически запускает тесты на каждом изменении кода.

Создание workflow для Jasmine

Чтобы интегрировать Jasmine с GitHub Actions, необходимо создать workflow файл в репозитории. Workflow состоит из набора шагов, каждый из которых выполняет определенную задачу. В случае с Jasmine задача состоит в запуске тестов в Node.js окружении.

  1. В корне репозитория создается директория .github/workflows, если она еще не существует.
  2. В этой директории создается YAML файл, например, test.yml, который будет содержать описание шагов для GitHub Actions.

Пример структуры файлов:

my-project/
├── .github/
│   └── workflows/
│       └── test.yml
├── package.json
└── src/

Пример конфигурации GitHub Actions для Jasmine

В test.yml задается описание workflow:

name: Run Jasmine Tests

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14'

    - name: Install dependencies
      run: npm install

    - name: Run Jasmine tests
      run: npm test

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

  1. on — описание триггеров, при которых запускается workflow. В данном случае это изменения в ветке main и запросы на слияние с ней.

  2. jobs — рабочие задачи, которые будут выполнены в рамках workflow. Здесь определен один job с именем test.

  3. runs-on — указание операционной системы, на которой будет выполняться job. В этом примере используется ubuntu-latest.

  4. steps — последовательность шагов, выполняемых в рамках job:

    • actions/checkout@v2 — шаг для клонирования репозитория.
    • actions/setup-node@v2 — установка Node.js версии 14.
    • npm install — установка зависимостей, указанных в package.json.
    • npm test — запуск тестов с использованием Jasmine.

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

Перед тем как настроить GitHub Actions для тестирования, необходимо подготовить сам проект. Убедитесь, что Jasmine установлен и настроен.

  1. Установите Jasmine:
npm install --save-dev jasmine
  1. Инициализируйте Jasmine:
npx jasmine init

Этот процесс создаст конфигурационные файлы и структуру папок для тестирования.

  1. Создайте тесты в директории spec/. Например, файл spec/exampleSpec.js с базовым тестом:
describe("Example test", () => {
  it("should return true", () => {
    expect(true).toBe(true);
  });
});
  1. Обновите package.json для запуска тестов с помощью Jasmine:
{
  "scripts": {
    "test": "jasmine"
  }
}

Теперь, когда проект настроен, а workflow файл готов, GitHub Actions будет автоматически запускать тесты при каждом пуше в ветку main или при открытии pull request.

Отладка и логирование

GitHub Actions позволяет просматривать подробные логи каждого шага в процессе выполнения. Это полезно для отладки, если тесты не проходят или возникает ошибка. Логи содержат подробную информацию о каждом этапе, включая установку зависимостей и запуск тестов.

Чтобы увидеть логи, нужно перейти в раздел Actions на GitHub, выбрать нужный workflow и просмотреть шаги, а также их вывод.

Кэширование зависимостей для ускорения CI

Для ускорения сборки и установки зависимостей можно использовать кэширование. В GitHub Actions это можно настроить с помощью actions/cache:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14'

    - name: Cache npm dependencies
      uses: actions/cache@v2
      with:
        path: ~/.npm
        key: ${{ runner.os }}-node-modules-${{ hashFiles('**/package-lock.json') }}
        restore-keys: |
          ${{ runner.os }}-node-modules-

    - name: Install dependencies
      run: npm install

    - name: Run Jasmine tests
      run: npm test

В данном примере кэшируются установленные зависимости, что ускоряет процесс сборки и предотвращает повторную установку пакетов, если они не изменились.

Уведомления о статусе тестов

GitHub Actions позволяет настраивать уведомления о статусе тестов. По умолчанию, после каждого выполнения workflow, если тесты не прошли, будет отображено предупреждение в интерфейсе GitHub. Также можно настроить интеграцию с другими сервисами, такими как Slack или email, чтобы получать уведомления о результате тестирования.

Для этого можно добавить шаг, который будет отправлять уведомление в случае неудачного выполнения:

- name: Notify failure
  if: failure()
  run: curl -X POST -H 'Content-type: application/json' --data '{"text":"Tests failed!"}' https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

Этот шаг отправляет сообщение в Slack в случае неудачного выполнения тестов.

Завершающие замечания

Интеграция Jasmine с GitHub Actions — это мощный способ автоматизировать тестирование JavaScript кода. Она позволяет обеспечить постоянную проверку качества кода на всех этапах разработки, начиная с коммитов и заканчивая pull request-ами. Настройка CI с использованием GitHub Actions — это быстрый и эффективный способ автоматизации тестирования с минимальными усилиями, что способствует повышению качества кода и предотвращению ошибок в проекте.