我使用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));
});
收到的结果是:错误!!!! TypeError:网络请求失败
答案 0 :(得分:7)
您需要返回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 polyfill。您可以通过直接导入来强制使用isomorphic-fetch
:
import fetch from 'isomorphic-fetch';
答案 1 :(得分:0)
好的我已经使用异步等待工作了,但是我仍然不明白为什么没有异步块它不能工作 - 所以现在我的测试使用这个代码:
it('should find a result via REST', async () => {
const data = await CqApi.personSearch('XYZ');
expect(....).toBeDefined();
});