Статья Nock: идеальный инструмент для тестирования HTTP-взаимодействий! была впервые опубликована в пятницу, 6 января 2023 г., в Блоге технических разработчиков. Для получения новейшего актуального контента, только что из печи, посетите https://techdevblog.io и подпишитесь на нашу рассылку!

Добро пожаловать в этот туториал по использованию библиотеки тестирования JavaScript Nock! Nock — это фантастический инструмент для тестирования HTTP-взаимодействий в вашем коде, и в этом руководстве мы рассмотрим различные концепции, которые вам необходимо знать, чтобы начать работу с Nock, а также продемонстрируем несколько примеров и лучших практик. с помощью API фактов о кошках.

Обо всем по порядку, начнем с установки Nock. Вы можете установить Nock с помощью npm, выполнив следующую команду:

npm install nock

После того, как Nock установлен, вы можете потребовать его в своем коде следующим образом:

const nock = require('nock');

Теперь, когда Nock установлен и требуется в нашем коде, давайте поговорим о различных концепциях, которые вам необходимо знать, чтобы эффективно использовать Nock.

Имитация HTTP-запросов

Одним из основных применений Nock является имитация HTTP-запросов. Это полезно при тестировании, поскольку позволяет вам контролировать ответ HTTP-запроса, а не полагаться на фактический ответ сервера.

Чтобы имитировать HTTP-запрос с Nock, вы можете использовать функцию nock(), которая принимает HTTP-метод, URL-адрес и объект ответа в качестве аргументов. Вот пример того, как вы можете использовать nock() для имитации GET-запроса к API фактов о кошках:

nock('https://cat-fact.herokuapp.com')
  .get('/facts')
  .reply(200, {
    text: 'Cats are amazing creatures.'
  });

Это имитирует запрос GET к конечной точке /facts API фактов о кошках и возвращает ответ с кодом состояния 200 и телом, содержащим текст «Кошки — удивительные существа».

Соответствующие запросы

В дополнение к указанию метода HTTP и URL-адреса запроса, который вы хотите имитировать, вы также можете использовать Nock для сопоставления определенных заголовков запроса или параметров запроса. Например, вы можете захотеть имитировать ответ на запрос GET к конечной точке /facts API фактов о кошках, но только если запрос включает определенный заголовок Authorization. Вы можете сделать это следующим образом:

nock('https://cat-fact.herokuapp.com', {
    reqheaders: {
      Authorization: 'Bearer abc123'
    }
  })
  .get('/facts')
  .reply(200, {
    text: 'Cats are amazing creatures.'
  });

Это будет имитировать ответ на запрос GET к конечной точке /facts, но только если запрос включает заголовок Authorization со значением Bearer abc123.

Вы также можете использовать Nock для сопоставления параметров запроса таким же образом. Например, если вы хотите имитировать ответ на запрос GET к конечной точке /facts, но только если запрос включает параметр запроса limit со значением 5, вы можете сделать это:

nock('https://cat-fact.herokuapp.com')
  .get('/facts')
  .query({
    limit: 5
  })
  .reply(200, {
    text: 'Cats are amazing creatures.'
  });

Лучшие практики

Теперь, когда вы знакомы с основами использования Nock для имитации HTTP-запросов, давайте поговорим о нескольких рекомендациях, которые следует учитывать при использовании Nock в ваших тестах.

Во-первых, важно убедиться, что вы очищаете моки после каждого теста. Это можно сделать с помощью метода .done() в прицеле nock, например:

const scope = nock('https://cat-fact.herokuapp.com')
  .get('/facts')
  .reply(200, {
    text: 'Cats are amazing creatures.'
  });

// Run your test code here

scope.done();

Это гарантирует, что все ожидаемые запросы были сделаны во время теста, и вызовет ошибку, если будут сделаны какие-либо неожиданные запросы.

Еще одна лучшая практика — использовать метод .persist() в вашем прицеле nock, чтобы макет оставался активным в нескольких тестах. Это может быть полезно, если у вас есть набор тестов, которые используют один и тот же фиктивный HTTP-запрос. Просто не забудьте очистить свои макеты, используя метод .done(), когда закончите.

Наконец, хорошей идеей будет использовать метод .log() в вашей области nock, чтобы регистрировать имитируемые запросы и ответы. Это может быть особенно полезно при отладке неудачных тестов, так как даст вам четкое представление о том, какие запросы выполняются и какие ответы возвращаются.

Заключение

Я надеюсь, что это руководство помогло вам начать работу с Nock! Помня об этих концепциях и рекомендациях, вы должны быть на пути к эффективному тестированию HTTP-взаимодействий в своем коде. Удачного тестирования!

Статья Nock: идеальный инструмент для тестирования HTTP-взаимодействий! была впервые опубликована в пятницу, 6 января 2023 г., в Блоге технических разработчиков. Для получения новейшего актуального контента, только что из печи, посетите https://techdevblog.io и подпишитесь на нашу рассылку!