web-dev-qa-db-ja.com

Jest-TypeError:ネットワーク要求がフェッチに失敗しました

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';
7
Lance Fisher

わかりました。これはasyncawaitを使用して機能するようになりましたが、asyncブロックがないと機能しない理由がわかりません。現在、私のテストは次のコードで機能します。

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

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