Настройка watched, included и served

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 — файл не доступен для браузера.

Примеры применения:

  • JSON, XML, CSV и другие ресурсы, которые тесты считывают через AJAX или fetch.
  • Файлы, используемые в тестах через динамическое импортирование.
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. Понимание этих параметров позволяет гибко контролировать, какие файлы подключаются, наблюдаются и предоставляются браузеру, что критично для масштабных проектов с большим количеством зависимостей и ресурсов.