Что принимает в себя функция fetch?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Развернутый ответ о параметрах функции fetch() в контексте QA Automation
Функция fetch() — это современный, Promise-based API для выполнения HTTP запросов в JavaScript и TypeScript. Она является ключевым инструментом для тестирования API, интеграционных проверок и работы с внешними сервисами в автотестах. Как QA Automation Engineer, важно понимать все её параметры для создания надежных и гибких тестов.
Основные параметры функции fetch()
const response = fetch(resource, init);
Функция принимает два параметра: обязательный resource (URL или объект запроса) и опциональный init (объект конфигурации).
1. resource — цель запроса
Это может быть строка URL или объект Request.
// Строка URL — самый частый вариант в автотестах
fetch('https://api.example.com/users');
// Объект Request (например, из другого запроса)
const request = new Request('https://api.example.com/data');
fetch(request);
2. init — объект конфигурации запроса
Это сложный объект, который позволяет полностью контролировать HTTP запрос. Вот его основные свойства, которые мы используем в тестировании:
const init = {
method: 'POST', // HTTP метод
headers: { // HTTP заголовки
'Content-Type': 'application/json',
'Authorization': 'Bearer token123'
},
body: JSON.stringify({ // Тело запроса (payload)
name: 'Test User',
email: 'test@example.com'
}),
mode: 'cors', // Режим запроса
cache: 'no-cache', // Политика кеширования
credentials: 'include', // Передача cookies
redirect: 'follow', // Поведение при редиректе
referrer: 'about:client', // Источник запроса
referrerPolicy: 'no-referrer-when-downgrade',
signal: abortController.signal // Для прерывания запроса
};
Ключевые параметры для QA Automation
method — HTTP метод
Определяет тип операции: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS. В тестах мы проверяем поведение API для разных методов.
// Тестирование разных методов в одном сценарии
const testMethods = ['GET', 'POST', 'PUT', 'DELETE'];
for (const method of testMethods) {
const response = await fetch(url, { method });
// Проверка статуса ответа и тела
}
headers — HTTP заголовки
Используются для передачи метаданных: авторизация, тип контента, кастомные заголовки для тестирования.
// Тестирование с различными заголовками авторизации
const headersConfigs = [
{ 'Authorization': 'Bearer valid_token' },
{ 'Authorization': 'Bearer expired_token' },
{ 'Authorization': 'Invalid format' },
{} // Без заголовка авторизации
];
for (const headers of headersConfigs) {
const response = await fetch(url, { headers });
// Проверяем соответствие статусов (200, 401, 403)
}
body — тело запроса
Передает данные в API. В тестах мы проверяем обработку разных форматов и валидность данных.
// Тестирование с различными типами body
const testPayloads = [
JSON.stringify({ user: 'test1' }), // JSON
'plain text payload', // Текст
new FormData(), // FormData
new URLSearchParams('param=value'), // URL параметры
null // Для GET запросов
];
const response = await fetch(url, {
method: 'POST',
body: testPayloads[0],
headers: { 'Content-Type': 'application/json' }
});
mode — режим безопасности запроса
Важен для тестирования CORS политик и безопасности:
'cors'(default) — разрешает кросс-доменные запросы с ограничениями'no-cors'— ограниченный режим для простых запросов'same-origin'— только запросы к своему домену
credentials — передача аутентификации
Определяет передачу cookies и заголовков авторизации:
'omit'— не передавать'same-origin'— только для своего домена'include'— передавать всегда (для тестирования сессий)
// Тестирование авторизации через cookies
fetch('/api/profile', {
credentials: 'include' // Cookies будут отправлены
});
signal — для контроля выполнения запроса
Позволяет прерывать запрос через AbortController. Это критично для тестирования timeout сценариев и управления долгими запросами.
// Тест на прерывание запроса
const abortController = new AbortController();
const timeoutId = setTimeout(() => abortController.abort(), 5000);
try {
await fetch('/api/long-operation', {
signal: abortController.signal
});
} catch (error) {
// Проверяем, что ошибка связана с abort
assert(error.name === 'AbortError');
}
Пример комплексного теста с fetch()
// Тестирование создания пользователя с валидацией
async function testUserCreation() {
const testData = {
valid: { name: 'John', email: 'john@test.com' },
invalidEmail: { name: 'John', email: 'invalid' },
missingName: { email: 'test@test.com' }
};
for (const [caseName, payload] of Object.entries(testData)) {
const response = await fetch('https://api.example.com/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer test-token'
},
body: JSON.stringify(payload),
credentials: 'include',
cache: 'no-cache'
});
const result = await response.json();
// Проверки согласно тестовому случаю
if (caseName === 'valid') {
assert(response.status === 201);
assert(result.id !== undefined);
} else if (caseName === 'invalidEmail') {
assert(response.status === 400);
assert(result.error === 'Invalid email format');
}
// ... другие проверки
}
}
Особенности для QA Automation
- Тестирование граничных случаев: Используя различные комбинации параметров
fetch(), мы можем проверить обработку ошибок API, валидацию входных данных, CORS политики, timeout обработку. - Интеграция с тестовыми фреймворками:
fetch()легко комбинируется с Jest, Mocha, Cypress для организации API тестов. - Mocking и стабирование: В автотестах мы часто мокаем
fetch()через библиотеки типаfetch-mockилиnockдля имитации ответов API без реального сервера. - Проверка безопасности: Параметры
mode,credentials,headersпозволяют тестировать security аспекты — авторизацию, CSRF, CORS.
Понимание всех параметров fetch() позволяет QA Automation инженеру создавать глубокие, комплексные тесты API, покрывающие не только базовые сценарии "положительного пути", но и граничные случаи, ошибки и особенности безопасности. Это фундаментальный навык для современной автоматизации тестирования веб-приложений.