Jest юнит-тестирование: блокировать весь исходящий трафик - PullRequest
0 голосов
/ 25 июня 2019

Я бы хотел как-то заблокировать весь исходящий трафик при запуске юнит-тестов с помощью jest. В идеале вы макетируете все модули (или функции, которые отправляют http-запросы), включая сторонние, но когда вы находитесь в процессе разработки, вы, возможно, не сможете макетировать все с самого начала и можете случайно отправить некоторые данные.

Если это невозможно с шуткой, что тогда будет лучшим способом сделать это? может быть, iptables?

1 Ответ

0 голосов
/ 26 июня 2019

Код JS может отправить запрос несколькими способами: new XMLHttpRequest, fetch и new WebSocket. После того, как вы высмеяли это в настройке файла (jest предоставляет один файл, который наверняка будет вызван перед выполнением любого теста), вы в безопасности:

window.fetch = jest.fn();

и позже в ваших тестах делайте это как

window.fetch.mockImplementation((url) =>  
   url === 'https://example.org/data' && 
     Promise.resolve({ message: 'wrong', data: 1 })
);
...
expect(window.fetch).toHaveBeenCalledWith('https://example.org/data');
...

Конечно, это было бы довольно большой работой, чтобы сделать это самостоятельно. Таким образом, есть определенные пакеты, которые делают это для вас. Скажите fetch-mock. Моим любимым на данный момент является nock, который охватывает как XHR, так и fetch и предоставляет множество утилит для охвата большинства возможных крайних случаев во время проверки сетевых ответов / запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...