Karma — это тестовый раннер для JavaScript, который позволяет запускать тесты в реальных браузерах. Одной из часто используемых возможностей Karma является проксирование HTTP-запросов, что особенно важно при тестировании приложений, взаимодействующих с бекендом через API.
Проксирование в Karma позволяет перенаправлять запросы, сделанные во время тестов, на другой сервер или путь, что обеспечивает независимость тестов от внешних ресурсов и упрощает настройку окружения.
Для проксирования используется конфигурационный файл
karma.conf.js, где в объекте config
задаются необходимые опции. Основные параметры:
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['jasmine'],
files: [
'src/**/*.js',
'test/**/*.spec.js'
],
proxies: {
'/api/': 'http://localhost:3000/api/',
'/images/': 'http://cdn.example.com/images/'
},
port: 9876,
browsers: ['ChromeHeadless'],
singleRun: true
});
};
proxies — объект, где ключи
представляют исходные пути, а значения — URL, на который нужно
перенаправлять запросы.fetch или XMLHttpRequest, а Karma
автоматически перенаправляет запрос на указанный URL.Если приложение делает запросы на /api/users, но бекенд
пока недоступен или необходимо имитировать определённые данные, можно
проксировать запросы на локальный мок-сервер:
proxies: {
'/api/': 'http://localhost:3000/mock-api/'
}
Таким образом, тесты будут получать предсказуемый ответ и не зависеть от внешнего API.
Для фронтенд-приложений с динамическими ресурсами можно проксировать запросы на CDN:
proxies: {
'/assets/': 'http://cdn.example.com/assets/'
}
Тесты смогут загружать файлы точно так же, как в реальном приложении.
GET,
POST, PUT, DELETE) Karma прокси
полностью поддерживает все стандартные методы.proxies, иначе прокси не сработает.Можно добавлять собственные функции middleware через параметр
middleware:
module.exports = function(config) {
config.set({
frameworks: ['jasmine'],
files: ['test/**/*.spec.js'],
proxies: {
'/api/': 'http://localhost:3000/api/'
},
middleware: ['custom'],
customMiddleware: function(req, res, next) {
if (req.url.startsWith('/api/')) {
req.headers['X-Test-Header'] = 'karma';
}
next();
}
});
};
Middleware позволяет добавлять заголовки, логировать запросы или модифицировать ответы перед передачей клиенту.
Karma поддерживает множественные прокси:
proxies: {
'/api/': 'http://localhost:3000/api/',
'/auth/': 'http://localhost:3001/auth/',
'/static/': 'http://cdn.example.com/static/'
}
Каждый путь можно направлять на отдельный сервер, что удобно для тестирования микросервисов.
Для проверки корректности работы прокси:
logLevel: config.LOG_DEBUG
Network в DevTools браузера,
запущенного Karma.proxies соответствуют
путям запросов в приложении.proxies.Проксирование запросов в Karma является мощным инструментом, позволяющим тестировать интеграцию фронтенда с внешними ресурсами, сохраняя тесты стабильными и независимыми от внешних изменений.