Синтаксис glob-паттернов

В Karma glob-паттерны используются для указания файлов, которые будут включены в тестирование или наблюдаться за изменениями. Правильное понимание их синтаксиса критично для точной настройки тестового окружения и избежания лишнего подключения файлов.

Основные элементы glob-паттернов

1. Звёздочка * Звёздочка заменяет любое количество символов в имени файла или папки, кроме разделителя пути /.

Примеры:

  • *.js — все файлы с расширением .js в текущей директории.
  • app/*.spec.js — все тестовые файлы с расширением .spec.js в папке app.

2. Двойная звёздочка ** Двойная звёздочка обозначает любое количество вложенных директорий. Это особенно полезно для глубоких структур проектов.

Примеры:

  • app/**/*.js — все .js файлы во всех подпапках app, на любом уровне вложенности.
  • **/*.spec.js — все файлы с расширением .spec.js по всему проекту.

3. Символ вопроса ? Знак вопроса соответствует одному любому символу в имени файла или папки.

Пример:

  • file?.js — подходит file1.js, fileA.js, но не file12.js.

4. Квадратные скобки [] Квадратные скобки задают множество допустимых символов на одной позиции.

Примеры:

  • file[0-9].jsfile0.js, file1.js, …, file9.js.
  • file[abc].jsfilea.js, fileb.js, filec.js.

5. Фигурные скобки {} Фигурные скобки позволяют указать несколько вариантов в одной позиции.

Примеры:

  • file.{js,ts} — файлы file.js или file.ts.
  • app/{core,utils}/*.js — все .js файлы в папках core и utils внутри app.

Настройка files и exclude в Karma

Karma использует glob-паттерны в конфигурации через массивы files и exclude.

module.exports = function(config) {
  config.set({
    files: [
      'src/**/*.js',
      'test/**/*.spec.js'
    ],
    exclude: [
      'src/legacy/**/*.js'
    ]
  });
};

Пояснения:

  • files — файлы, которые будут загружены в тестовое окружение.
  • exclude — файлы, исключённые из загрузки, даже если они подходят под шаблон в files.

Особенности использования в Karma

  • Порядок имеет значение. Karma загружает файлы в том порядке, в котором они указаны в массиве files.
  • Поддержка относительных и абсолютных путей. Пути обычно указываются относительно корневой директории проекта.
  • Поддержка массивов и комбинированных паттернов. Один и тот же тип файлов можно подключать через несколько паттернов сразу.

Практические рекомендации

  • Для тестов лучше использовать **/*.spec.js вместо точного указания папок — это упрощает добавление новых файлов без изменения конфигурации.

  • Для больших проектов исключение устаревших или экспериментальных модулей через exclude уменьшает время запуска тестов.

  • Комбинация фигурных и двойных звёздочек позволяет строить гибкие фильтры:

    'src/{core,components}/**/*.js'

    Здесь будут подключены все JS-файлы в папках core и components, включая их подпапки.

Особые случаи

  • Скрытые файлы: файлы, начинающиеся с точки ., не включаются стандартными паттернами. Чтобы их учитывать, требуется явно указать:

    'src/**/.*.js'
  • Совмещение с плагинами Karma: некоторые плагины (например, karma-webpack) могут интерпретировать glob-паттерны по-своему, но базовый синтаксис остаётся тем же.

  • Escaping символов: если имя файла содержит специальные символы ([, ], {, }), их необходимо экранировать обратным слэшем:

    'src/array\\[test\\].js'

Заключение по синтаксису

Использование glob-паттернов в Karma позволяет точно настраивать загрузку файлов для тестов, обеспечивая гибкость и масштабируемость. Понимание всех символов и их сочетаний делает конфигурацию максимально эффективной и предотвращает случайное подключение лишних файлов или пропуск важных тестов.