javascript42
Главная
Все учебники
Блог
Учебник Karma
Введение в Karma
Что такое Karma
Karma в экосистеме JavaScript
Сравнение с другими test runner
Когда использовать Karma
Архитектура и принципы работы
Установка и начальная настройка
Требования к окружению
Установка через npm
Установка через yarn и pnpm
Глобальная и локальная установка
Проверка установки
Структура проекта для Karma
Первый запуск
Файл конфигурации
Создание karma.conf.js
Анатомия конфигурационного файла
Генерация конфигурации через karma init
Формат конфигурации
Экспорт функции конфигурации
Множественные конфигурационные файлы
Переменные окружения в конфигурации
Основные параметры конфигурации
basePath
frameworks
files
preprocessors
reporters
port и hostname
logLevel
autoWatch и singleRun
browsers
captureTimeout и browserNoActivityTimeout
concurrency
Паттерны файлов
Синтаксис glob-паттернов
Включение файлов
Исключение файлов
Порядок загрузки файлов
Настройка watched, included и served
Работа с вложенными директориями
Динамическое определение файлов
Фреймворки тестирования
Интеграция с Jasmine
Интеграция с Mocha
Интеграция с QUnit
Установка адаптеров фреймворков
Конфигурация специфичная для фреймворков
Создание кастомных адаптеров
Совместное использование фреймворков
Препроцессоры
Концепция препроцессоров
Karma-webpack
Karma-browserify
Karma-rollup-preprocessor
Karma-coverage
Karma-typescript
Babel через karma-babel-preprocessor
Создание собственного препроцессора
Цепочки препроцессоров
Репортеры
Dots reporter
Progress reporter
Spec reporter
JUnit reporter
Coverage reporter
HTML reporter
JSON reporter
Teamcity reporter
Mocha reporter
Кастомные репортеры
Множественные репортеры
Code coverage
Настройка Istanbul через karma-coverage
Типы отчетов покрытия
Пороги покрытия
Инструментирование кода
Исключение файлов из покрытия
Интеграция с CI/CD
Source maps и покрытие
Оптимизация сбора метрик
Webpack интеграция
Установка karma-webpack
Базовая конфигурация
Webpack config в karma.conf.js
Работа с entry points
Обработка модулей
Source maps
Hot Module Replacement
Оптимизация сборки для тестов
Debug режим
TypeScript
Настройка karma-typescript
Конфигурация tsconfig для тестов
Компиляция и бандлинг
Type checking в тестах
Покрытие кода TypeScript
Работа с декораторами
Path mapping
Интеграция с webpack
Плагины
Архитектура плагинов Karma
Официальные плагины
Сообщество плагинов
Установка плагинов
Конфигурация плагинов
Разработка собственного плагина
Plugin API
Lifecycle hooks
Режимы запуска
Single run режим
Watch режим
Запуск конкретных тестов
Параметры командной строки
Programmatic API
Запуск из npm scripts
Запуск через package.json
Debugging
Открытие debug window
Chrome DevTools
Breakpoints в тестах
Логирование в Karma
Уровни логов
Debug конфигурации
Общие проблемы и решения
Middleware
HTTP middleware в Karma
Кастомные middleware
Проксирование запросов
Мокирование API
Static file serving
CORS настройки
Аутентификация
Request/response модификация
Производительность
Оптимизация времени выполнения
Кэширование
Минимизация перезагрузок
Параллельное выполнение
Настройка таймаутов
Профилирование тестов
Lazy loading файлов
Оптимизация webpack конфигурации
Удаленное тестирование
Karma runner на удаленных машинах
BrowserStack интеграция
Sauce Labs интеграция
Selenium Grid
Docker containers
Настройка сетевого доступа
Tunneling решения
Расширенная конфигурация
Программная конфигурация
Динамическая конфигурация
Конфигурация на основе окружения
Наследование конфигураций
Условная загрузка файлов
Кастомные лаунчеры
Расширенные настройки препроцессоров
Тонкая настройка reporters
Тестирование в различных окружениях
Node.js окружение
Browser окружение
Гибридное тестирование
Полифилы и shims
Мокирование browser API
Тестирование с DOM
Web Workers
Service Workers
Best practices
Организация тестовых файлов
Naming conventions
Изоляция тестов
Управление зависимостями
Оптимальная конфигурация
Security considerations
Maintainability
Team workflows