Karma — это тестовый раннер для JavaScript, который обеспечивает запуск тестов в реальных браузерах. Одним из ключевых элементов настройки Karma является корректное включение файлов, так как от этого зависит, какие модули, библиотеки и тесты будут доступны во время выполнения.
karma.conf.jsВся логика включения файлов определяется в файле конфигурации
karma.conf.js. Основные свойства, отвечающие за подключение
ресурсов:
files — массив файлов и шаблонов, которые необходимо
загрузить.exclude — массив файлов или шаблонов, которые
необходимо исключить.preprocessors — указывает, какие файлы требуют
предварительной обработки (например, транспиляции через Babel).Пример базовой структуры:
module.exports = function(config) {
config.set({
frameworks: ['jasmine'],
files: [
'src/**/*.js',
'test/**/*.spec.js'
],
exclude: [
'src/experimental/**'
],
preprocessors: {
'src/**/*.js': ['babel']
},
browsers: ['Chrome'],
singleRun: true
});
};
В этом примере подключаются все JavaScript-файлы из src
и все тесты из test, исключая экспериментальные модули.
Файлы из src проходят через Babel для трансляции.
Порядок файлов в массиве files критически важен:
Нарушение порядка может приводить к ошибкам
ReferenceError или TypeError, когда тест
пытается использовать ещё не загруженный модуль.
glob patterns)Karma поддерживает шаблоны для указания множества файлов:
'src/**/*.js' — все .js файлы в папке
src и её подкаталогах.'test/*Spec.js' — только файлы с конкретным
суффиксом.{pattern: 'src/**/*.js', watched: true, served: true, included: true}
— более детальная настройка.Параметры шаблона:
true, Karma будет
отслеживать изменения и автоматически перезапускать тесты.true, файл будет
доступен через веб-сервер Karma.true, файл будет
автоматически вставлен через тег <script> в
браузер.Массив exclude позволяет убрать лишние файлы из
загрузки, например:
exclude: [
'src/**/*.min.js',
'src/legacy/**'
]
Это предотвращает конфликт версий библиотек или подключение устаревшего кода.
Для библиотек, которые не являются модульными, можно использовать
путь к CDN или локальный файл в files:
files: [
'node_modules/jquery/dist/jquery.min.js',
'src/**/*.js',
'test/**/*.spec.js'
]
Если библиотека должна быть доступна для тестов, но не вставляться в
браузер автоматически, используется настройка
included: false.
Karma поддерживает preprocessors для обработки файлов перед выполнением тестов. Часто применяются:
babel — транспиляция ES6+ в ES5.coverage — генерация отчета по покрытию кода.webpack — сборка модулей через Webpack.Пример конфигурации:
preprocessors: {
'src/**/*.js': ['babel', 'coverage'],
'test/**/*.spec.js': ['babel']
}
ng-html2js или
html2js preprocessors.included: false, а
загрузка управляется модульным загрузчиком.После запуска Karma можно убедиться, что все файлы корректно
загружены. В браузере открывается панель с загруженными скриптами.
Ошибки 404 указывают на неправильный путь или неверный
шаблон.
src/ и test/).**/*.spec.js)
для удобного автоматического обнаружения.files и
exclude.Файл конфигурации Karma, настроенный правильно, позволяет полностью контролировать порядок загрузки и подготовку всех ресурсов, что является основой стабильного и предсказуемого тестирования JavaScript.