2016-10-19 4 views
6

Я использую Jest для тестирования API REST, и я получаю TypeError: запрос сетевых запросов с ошибкой всякий раз, когда я выдаю запрос на выборку. Все вызовы API REST работают над приложением и терпят неудачу исключительно на моих тестах Jest.Jest - TypeError: неудачный сетевой запрос для извлечения

Есть ли какая-либо известная несовместимость между fetch и Jest? Например, этот простой тест заканчивает выполнение крылатого заявления:

it('should find a result via fetch',() => { 
    fetch('http://www.google.com').then(() => console.log('Success')).catch((err) => console.log('Error!!!!' + err)); 
}); 

В результате получил: Ошибка !!!! TypeError: Запрос сети не удался

+0

www.google.com URL на самом деле плохой пример - так как он требует серии заголовков быть установлены и, таким образом, всегда терпит неудачу, если заголовки не присутствуют , Но моя конечная точка API не требует никаких и все еще не работает –

+0

Проверьте https://stackoverflow.com/questions/44450278/fetch-doesnt-work-in-jest-and-return-typeerror-network-request-failed/47243968# 47243968 – Ron

ответ

0

Ok Я получил эту работу с помощью асинхр ждет, но я до сих пор не понимаю, почему он не работает без асинхронного блок- Так прямо сейчас мой тест работает с этим кодом:

it('should find a result via REST', async() => { 
     const data = await CqApi.personSearch('XYZ'); 

     expect(....).toBeDefined(); 
    }); 
4

Вы должны вернуть Promise что fetch возвращается:

it('should find a result via fetch',() => { 
    return fetch('http://www.google.com') 
     .then(() => console.log('Success')) 
     .catch((err) => console.log('Error!!!!' + err)); 
}); 

Вы можете прочитать в JEST документов о асинхронном тестировании здесь: https://facebook.github.io/jest/docs/tutorial-async.html

Кроме того, использование шутки в create-react-app будет использовать WHATWG-выборку polyfill через jsdom. Вы можете принудительно использовать isomorphic-fetch, импортируя его непосредственно:

import fetch from 'isomorphic-fetch'; 
+1

Привет, после переключения на «изоморфный выбор», тесты жалуются, что «поддерживается только абсолютный URL-адрес». Есть ли способ обойти это, кроме изменения абсолютных URL-адресов? –