Jestを使用してREST APIをテストし、TypeErrorを受信しています:フェッチリクエストを発行するたびにネットワークリクエストが応答に失敗しました。REST = APIはアプリケーションで機能し、Jestテストでのみ失敗します。
フェッチとジェストの間に既知の非互換性はありますか?たとえば、この単純なテストは、catchステートメントを実行することになります。
it('should find a result via fetch', () => {
fetch('http://www.google.com').then(() => console.log('Success')).catch((err) => console.log('Error!!!!' + err));
});
受信した結果は次のとおりです。エラー!!!! TypeError:ネットワーク要求が失敗しました
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 でjestを使用すると、jsdomを介してwhatwg-fetchポリフィルが使用されます。 isomorphic-fetch
を直接インポートすることで、強制的に使用できます。
import fetch from 'isomorphic-fetch';
わかりました。これはasyncawaitを使用して機能するようになりましたが、asyncブロックがないと機能しない理由がわかりません。現在、私のテストは次のコードで機能します。
it('should find a result via REST', async () => {
const data = await CqApi.personSearch('XYZ');
expect(....).toBeDefined();
});