Jest - TypeError:获取网络请求失败

Joa*_*elo 14 fetch jestjs

我正在使用Jest来测试REST API并且我收到TypeError:每当我发出获取请求时网络请求都会失败响应.所有对REST API的调用都在应用程序上运行,并且在我的Jest测试中完全失败.

fetch和Jest之间是否存在任何已知的不兼容性?例如,这个简单的测试最终会执行catch语句:

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

收到的结果是:错误!!!! TypeError:网络请求失败

Lan*_*her 7

您需要返回Promisefetch返回:

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

您可以在这里阅读有关异步测试的jest文档中的更多内容:https://facebook.github.io/jest/docs/tutorial-async.html

另外,在create-react-app中使用jest 将通过jsdom使用whatwg-fetch polyfill.您可以isomorphic-fetch通过直接导入来强制使用它:

import fetch from 'isomorphic-fetch';
Run Code Online (Sandbox Code Playgroud)

  • 嗨,在切换到'isomorphic-fetch'之后,测试抱怨"只支持绝对网址".除了改为绝对网址之外,还有其他方法吗? (2认同)

Joa*_*elo 0

好吧,我已经使用 async wait 让它工作了,但我仍然不明白为什么它在没有 async 块的情况下不起作用 - 所以现在我的测试使用以下代码:

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

        expect(....).toBeDefined();
    });
Run Code Online (Sandbox Code Playgroud)