Краткий справочник

Шпаргалка по HTTP-мокингу с Nock

Краткий справочник по библиотеке Nock: мокинг HTTP-серверов в Node.js, фильтрация URL, сопоставление query-параметров и фиктивные ответы.

· Опубликовано

Nock — библиотека для мокинга HTTP-серверов и проверки ожиданий в Node.js, перехватывающая исходящие запросы через http.request.

Базовый мокинг

const nock = require('nock');

// Мок GET-эндпоинта
const scope = nock('https://api.example.com')
  .get('/users/1')
  .reply(200, {
    id: 1,
    name: 'Alice Cooper'
  });

// Пропускать немокированные запросы в реальную сеть
const unmockedScope = nock('https://api.example.com', {
  allowUnmocked: true
});

Фильтрация запросов и query-параметры

Сопоставление query-параметров

nock('https://api.example.com')
  .get('/search')
  .query({ q: 'cheese', page: '1' })
  .reply(200, { results: [] });

Фильтрация путей (маскировка динамических токенов)

Удаляйте динамические токены или метки времени перед сравнением:

nock('https://api.example.com')
  .filteringPath(/[&?]token=[^&]*/g, '')
  .get('/user')
  .reply(200, { authorized: true });

// Перехватывает "/user?token=xyz123" как "/user"

Мокинг POST-запросов и заголовков

nock('https://api.example.com')
  .matchHeader('authorization', 'Bearer token_123')
  .post('/checkout', { items: [1, 2] })
  .reply(201, { status: 'created' }, {
    'X-Custom-Header': 'MockValue'
  });

Проверки и очистка

// Проверить, что все объявленные перехватчики были вызваны
scope.isDone(); // => true / false

// Очистить все активные перехватчики
nock.cleanAll();

// Восстановить исходное HTTP-поведение Node.js
nock.restore();

Ссылки

Связанные темы