Какие способы выполнения HTTP-запросов в браузере на JavaScript?
Что проверяют
Понимаете ли вы, как фронтенд общается с сервером, настолько, чтобы находить баги на уровне сети, а не только в интерфейсе. Следом обычно спрашивают, как отличить ошибку CORS от падения бэкенда и как подменить ответ сервера в автотесте.
Как отвечать
Назовите способы и сразу то, что из них важно тестировщику:
fetch: основной современный API на промисах. Ответ с кодом 4xx или 5xx промис не отклоняет, отклонение бывает только при сетевой ошибке. Поэтому обработка ошибок сервера это отдельный тест-кейс;XMLHttpRequest: старый API, до сих пор живёт в легаси и в библиотеках. Умеет отслеживать прогресс загрузки файла;- axios: библиотека, в браузере работает поверх XHR и, в отличие от
fetch, по умолчанию бросает ошибку на любой ответ вне 2xx; navigator.sendBeacon: фоновая отправка аналитики при закрытии страницы. Его легко пропустить, если в DevTools стоит фильтр только на Fetch/XHR;- WebSocket и
EventSource(SSE): постоянное соединение для чатов и уведомлений, сообщения видны на вкладке Messages у самого соединения; - формы и навигация: обычный
<form>с перезагрузкой страницы тоже HTTP-запрос.
Практическая часть: вкладка Network, статус, заголовки, тело, preflight-запрос OPTIONS при CORS. Команды «Copy as fetch» и «Copy as cURL» переносят запрос в консоль или Postman. В автотестах ответы подменяют через page.route() в Playwright и cy.intercept() в Cypress: так проверяют пустой список, ответ 500, медленную сеть.
Если вы в ручном тестировании, добавьте, что проверяете отмену запросов при быстром переключении экранов и повторную отправку при двойном клике.
Где спотыкаются
Видят в консоли ошибку CORS и заводят баг «сервер лежит». Сервер ответил, но браузер не отдал ответ скрипту из-за заголовков, и это видно в Network.
Считают, что код на fetch сам заметит ответ 500. Без проверки response.ok интерфейс часто молча показывает пустой экран, и этот кейс надо проверять отдельно.
Проверяют только UI. Запрос мог уйти дважды, с лишними полями или без токена авторизации, а на экране всё выглядит нормально.