Я пишу библиотеку JavaScript / React, в которой используется fetch
.
. Я использую Jest для тестирования этой библиотеки, и я хотел бы добиться:
- Макет HTTP-запросов, чтобы не отправлять реальные вызовы и манипулировать ответами (макет бэкэнд-сервера), поэтому я использую
fetch-mock
- Проверка переданных параметров функции
fetch
Чтобы достичь первого балла, мне нужно сделать
fetchMock.post(`${API_URL}/sessions`, {
body: JSON.stringify({
token: 'this-is-your-token'
}),
status: 201
})
Для того, чтобы достичь второго балла, мне нужно сделать
const spiedFetch = jest.spyOn(global, 'fetch')
// ...
expect(spiedFetch).toHaveBeenCalledTimes(1)
(последняя строка находится в серии describe()
и it()
).
У меня есть первый тест, который гарантирует, что ответ имеет поле token
и т. Д., Ивторой тест гарантирует, что fetch
был вызван один раз.
Когда я запускаю их, первый проходит, а второй - не проходит.Когда я комментирую fetchMock.post(...)
, первый отказывает, а второй проходит.
Исходя из этого, я думаю, fetch-mock
и jest.spyOn
несовместимы.
Вопросы:
- Правильно ли я думаю, что
fetch-mock
и jest.spyOn
несовместимы? - Как мне выполнить тестирование ответа
fetch
И переданных параметров?(Я хочу убедиться, что это HTTP-глагол, а переданные заголовки таковы). - Я мог бы подумать о том, чтобы использовать
fetch-mock
как есть, но использовать jest.spyOn
в функции моегоlib, которая будет встраивать fetch
.Это нормальный способ сделать это?
ОБНОВЛЕНИЕ: Я попробовал свою точку 3, и она работает.