【发布时间】:2018-08-10 07:01:54
【问题描述】:
我正在使用 Jest 测试我的 React-Redux 应用程序,作为 API 调用的一部分,我正在导入一个提取模块 cross-fetch。我想用fetch-mock 覆盖或替换它。这是我的文件结构:
Action.js
import fetch from 'cross-fetch';
export const apiCall = () => {
return fetch('http://url');
Action.test.js
import fetchMock from 'fetch-mock';
import { apiCall } from './Action';
fetchMock.get('*', { hello: 'world' });
describe('actions', () => {
apiCall().then(
response => {
console.log(response)
})
})
显然,此时我还没有设置测试。因为交叉获取是在更接近它使用它的获取实现的函数处导入的,导致它执行实际调用而不是我的模拟。让 fetch 被模拟的最佳方法是什么(除了删除 import fetch from 'cross-fetch' 行)?
有没有办法根据调用的节点脚本是test 还是build 进行条件导入?还是将模拟提取设置为优先?
【问题讨论】:
-
运行测试时会发生什么?
-
当我在不删除
import fetchMock的情况下运行我的代码时,它显示only absolute urls are supported带有提取 -
什么代码导致了这个错误?您是否尝试将其更改为绝对 URL?
-
导入会导致该错误。如果我在其中放入一个实际的 URL,则只需调用该 URL,这显然不是我想要的。如果我删除该导入,它会改用 fetch-mock。
标签: javascript reactjs ecmascript-6 fetch jestjs