← Назад к вопросам

Что принимает в себя функция fetch?

2.0 Middle🔥 131 комментариев
#Теория тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Развернутый ответ о параметрах функции 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

  1. Тестирование граничных случаев: Используя различные комбинации параметров fetch(), мы можем проверить обработку ошибок API, валидацию входных данных, CORS политики, timeout обработку.
  2. Интеграция с тестовыми фреймворками: fetch() легко комбинируется с Jest, Mocha, Cypress для организации API тестов.
  3. Mocking и стабирование: В автотестах мы часто мокаем fetch() через библиотеки типа fetch-mock или nock для имитации ответов API без реального сервера.
  4. Проверка безопасности: Параметры mode, credentials, headers позволяют тестировать security аспекты — авторизацию, CSRF, CORS.

Понимание всех параметров fetch() позволяет QA Automation инженеру создавать глубокие, комплексные тесты API, покрывающие не только базовые сценарии "положительного пути", но и граничные случаи, ошибки и особенности безопасности. Это фундаментальный навык для современной автоматизации тестирования веб-приложений.