Karma — это тестовый раннер для JavaScript, ориентированный на автоматическое выполнение тестов в разных браузерах. BrowserStack предоставляет облачную инфраструктуру для запуска тестов в реальных браузерах и на реальных устройствах, что позволяет проверить кросс-браузерную совместимость без локальной установки множества окружений. Интеграция Karma с BrowserStack позволяет автоматически запускать тесты на удалённых платформах и получать подробные отчёты о результатах.
Для работы с BrowserStack через Karma требуются следующие npm-пакеты:
npm install karma karma-browserstack-launcher --save-dev
karma — основной тестовый раннер.karma-browserstack-launcher — плагин для подключения
BrowserStack.Дополнительно рекомендуется иметь установленный любой тестовый фреймворк, например, Jasmine или Mocha:
npm install jasmine-core karma-jasmine --save-dev
karma.conf.jsФайл конфигурации Karma является ключевым элементом интеграции. Для подключения BrowserStack необходимо добавить следующие секции:
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['jasmine'], // Выбранный тестовый фреймворк
files: [
'src/**/*.js',
'test/**/*.spec.js'
],
reporters: ['progress', 'BrowserStack'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: false,
browsers: ['BS_Chrome', 'BS_Firefox'], // Названия браузеров, определяемые ниже
singleRun: true,
concurrency: 2, // Количество параллельных сессий BrowserStack
browserStack: {
username: process.env.BROWSERSTACK_USERNAME,
accessKey: process.env.BROWSERSTACK_ACCESS_KEY,
build: 'karma-browserstack-integration',
name: 'JS Unit Tests'
},
customLaunchers: {
BS_Chrome: {
base: 'BrowserStack',
browser: 'chrome',
browser_version: 'latest',
os: 'Windows',
os_version: '11'
},
BS_Firefox: {
base: 'BrowserStack',
browser: 'firefox',
browser_version: 'latest',
os: 'OS X',
os_version: 'Monterey'
}
}
});
};
Ключевые моменты конфигурации:
browserStack.username и
browserStack.accessKey должны храниться в переменных
окружения, чтобы не раскрывать ключи в коде.customLaunchers определяет список удалённых браузеров и
платформ для запуска тестов.singleRun: true гарантирует, что тесты будут выполнены
один раз и завершат процесс Karma.BrowserStack поддерживает большое количество браузеров и операционных
систем. В customLaunchers можно указать конкретные версии
браузеров, например:
BS_Safari: {
base: 'BrowserStack',
browser: 'safari',
browser_version: '15.4',
os: 'OS X',
os_version: 'Monterey'
}
Использование нескольких кастомных лончеров позволяет параллельно тестировать проект на разных устройствах, что особенно важно для сложных веб-приложений.
Параметр concurrency контролирует количество тестов,
выполняемых одновременно на BrowserStack. Высокое значение ускоряет
процесс, но требует больше параллельных сессий по тарифу BrowserStack.
Например:
concurrency: 5
Обеспечивает одновременный запуск тестов на пяти удалённых браузерах.
Для автоматического запуска тестов на CI/CD-платформах (GitHub Actions, GitLab CI, Jenkins) необходимо:
BROWSERSTACK_USERNAME и
BROWSERSTACK_ACCESS_KEY.karma start karma.conf.js
Пример GitHub Actions:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '20'
- name: Install dependencies
run: npm ci
- name: Run Karma tests
env:
BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }}
BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
run: karma start karma.conf.js
Karma с BrowserStack поддерживает несколько типов репортов:
progress — базовый вывод прогресса тестов.dots — компактный вывод по тестам.BrowserStack — специфический вывод с ссылкой на
результаты на платформе BrowserStack.Для отладки проблем рекомендуется включать логирование уровня
config.LOG_DEBUG и проверять консоль BrowserStack, где
отображаются ошибки JavaScript и скриншоты тестов.
latest,
чтобы минимизировать разницу в поведении между тестовыми сессиями.Интеграция Karma с BrowserStack позволяет автоматизировать кросс-браузерное тестирование, упрощает CI/CD-процессы и повышает качество JavaScript-приложений. Такой подход обеспечивает покрытие тестами реальных окружений без необходимости локальной установки множества браузеров и операционных систем.