GitHub Actions позволяет автоматизировать процессы сборки, тестирования и развертывания приложений, обеспечивая интеграцию с GitHub. Для JavaScript проектов использование GitHub Actions с тестами на Jasmine помогает настроить непрерывную интеграцию, которая автоматически запускает тесты на каждом изменении кода.
Чтобы интегрировать Jasmine с GitHub Actions, необходимо создать workflow файл в репозитории. Workflow состоит из набора шагов, каждый из которых выполняет определенную задачу. В случае с Jasmine задача состоит в запуске тестов в Node.js окружении.
.github/workflows, если она еще не существует.test.yml, который будет содержать описание шагов для GitHub
Actions.Пример структуры файлов:
my-project/
├── .github/
│ └── workflows/
│ └── test.yml
├── package.json
└── src/
В 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
on — описание триггеров, при которых запускается
workflow. В данном случае это изменения в ветке main и
запросы на слияние с ней.
jobs — рабочие задачи, которые будут выполнены в
рамках workflow. Здесь определен один job с именем
test.
runs-on — указание операционной системы, на
которой будет выполняться job. В этом примере используется
ubuntu-latest.
steps — последовательность шагов, выполняемых в рамках job:
actions/checkout@v2 — шаг для клонирования
репозитория.actions/setup-node@v2 — установка Node.js версии
14.npm install — установка зависимостей, указанных в
package.json.npm test — запуск тестов с использованием Jasmine.Перед тем как настроить GitHub Actions для тестирования, необходимо подготовить сам проект. Убедитесь, что Jasmine установлен и настроен.
npm install --save-dev jasmine
npx jasmine init
Этот процесс создаст конфигурационные файлы и структуру папок для тестирования.
spec/. Например, файл
spec/exampleSpec.js с базовым тестом:describe("Example test", () => {
it("should return true", () => {
expect(true).toBe(true);
});
});
package.json для запуска тестов с помощью
Jasmine:{
"scripts": {
"test": "jasmine"
}
}
Теперь, когда проект настроен, а workflow файл готов, GitHub Actions
будет автоматически запускать тесты при каждом пуше в ветку
main или при открытии pull request.
GitHub Actions позволяет просматривать подробные логи каждого шага в процессе выполнения. Это полезно для отладки, если тесты не проходят или возникает ошибка. Логи содержат подробную информацию о каждом этапе, включая установку зависимостей и запуск тестов.
Чтобы увидеть логи, нужно перейти в раздел Actions на GitHub, выбрать нужный workflow и просмотреть шаги, а также их вывод.
Для ускорения сборки и установки зависимостей можно использовать
кэширование. В 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 — это быстрый и эффективный способ автоматизации тестирования с минимальными усилиями, что способствует повышению качества кода и предотвращению ошибок в проекте.