Karma — это тестовый раннер для JavaScript, который позволяет
запускать тесты в реальных браузерах, обеспечивая высокую точность и
совместимость. Центральную роль в конфигурации Karma играют параметры
watched, included и served,
которые определяют, как файлы обрабатываются и подаются браузеру.
Понимание этих настроек критически важно для оптимизации тестового
процесса, управления зависимостями и ускорения выполнения тестов.
watchedНазначение: отвечает за слежение Karma за изменениями в файле. Если файл изменяется, тесты автоматически перезапускаются, что позволяет работать в режиме непрерывного тестирования.
Возможные значения:
true — файл отслеживается; при изменении тесты
перезапускаются.false — файл не отслеживается; изменения в нём не
вызывают перезапуск тестов.Применение: watched особенно важен для
больших проектов, где не требуется постоянное наблюдение за всеми
зависимостями. Например, библиотеки, которые редко изменяются, можно
отключить от слежения для уменьшения нагрузки на файловую систему и
ускорения перезапуска тестов.
files: [
{ pattern: 'src/**/*.js', watched: true },
{ pattern: 'vendor/**/*.js', watched: false }
]
В этом примере все исходные файлы проекта отслеживаются, а сторонние библиотеки — нет.
includedНазначение: определяет, будет ли файл автоматически
включён в HTML-страницу тестов через тег <script>.
Это критично для подключения зависимостей и самих тестов.
Возможные значения:
true — файл автоматически подключается к тестовой
среде.false — файл не подключается; его можно загрузить
динамически через тестовый код или как ресурс.Особенности применения:
included: true.included: false, чтобы не
загромождать тестовую страницу и уменьшить время запуска.files: [
{ pattern: 'src/lib.js', included: true },
{ pattern: 'assets/data.json', included: false }
]
В этом примере библиотека lib.js подключается напрямую,
а JSON-файл используется как ресурс и загружается по мере
необходимости.
servedНазначение: определяет, будет ли файл доступен Karma через веб-сервер, но не обязательно включён в HTML. Обычно используется для статических ресурсов или файлов, которые нужно подгружать асинхронно.
Возможные значения:
true — файл доступен через сервер Karma по URL
/base/....false — файл не доступен для браузера.Примеры применения:
files: [
{ pattern: 'assets/data.json', served: true, included: false }
]
Тогда файл data.json будет доступен по адресу
http://localhost:9876/base/assets/data.json для тестов, но
не будет автоматически подключён через <script>.
Понимание комбинаций watched, included и
served позволяет гибко настраивать тестовую среду:
| watched | included | served | Результат |
|---|---|---|---|
| true | true | true | Файл подключается и наблюдается; изменения перезапускают тесты. |
| true | false | true | Файл доступен через сервер, изменения перезапускают тесты, но автоматически не подключается. |
| false | true | true | Файл подключается, но изменения не вызывают перезапуск тестов. |
| false | false | true | Файл доступен как ресурс, но не отслеживается и не включается автоматически. |
| false | false | false | Файл полностью игнорируется Karma. |
Практические рекомендации:
watched: true,
included: true, served: true.watched: true,
included: true, served: true.watched: false,
included: false, served: true.watched: false,
included: true, served: true.Karma использует префикс /base/ для всех файлов,
указанных в конфигурации. Любой файл с served: true можно
загрузить по этому пути. Например, для файла
assets/data.json доступный URL будет:
http://localhost:9876/base/assets/data.json
Эта особенность особенно полезна для загрузки ресурсов через
fetch или XMLHttpRequest в тестах.
watched: true в
больших проектах для ускорения перезапуска тестов.included: false для файлов, которые
загружаются динамически, чтобы уменьшить время загрузки тестовой
страницы.served: true корректно
доступны через /base/ при написании асинхронных тестов с
ресурсами.Настройка watched, included и
served — фундамент для управления тестовой средой в Karma.
Понимание этих параметров позволяет гибко контролировать, какие файлы
подключаются, наблюдаются и предоставляются браузеру, что критично для
масштабных проектов с большим количеством зависимостей и ресурсов.