【发布时间】:2019-11-06 17:30:41
【问题描述】:
我正在尝试测试一个作为 api 调用/承诺的函数,以便我可以使用 jest 检查 then 内部的状态,但似乎无法弄清楚该怎么做。我试过模拟文件和函数来返回一个承诺,但得到一个错误TypeError: (0 , _dataAccess.fetchBundlesFromApi) is not a function 我试过关注 jests 网站上的文档以及堆栈溢出的许多不同答案,但似乎没有一个有效。这是我要测试的代码。我希望能够调用它,然后说是否可以检查状态或错误是否执行其他操作。下面是我正在尝试做的代码和我尝试过的模拟。
getLatestPrices = params => {
const { updateBundles } = this.props;
fetchBundlesFromApi(params)
.then(({ data: { bundles } }) => {
updateBundles(bundles);
this.setState({ showUpdatingPrices: false });
window.TemplateCalculator.reload();
})
.catch(() => goToUrl(bundlesUrl));
};`
fetchBundlesFromApi 是 import { fetchBundlesFromApi } from '../../../../dataAccess';,这是一个 axios 调用:
const fetchBundlesFromApi = params => axios(`${bundleRoute}/bundles${params}`);
export { fetchBundlesFromApi };
这是我试过的嘲讽。
jest.mock('../../../../dataAccess', () => ({
fetchBundlesFromApi: new Promise(resolve => resolve({ data: mockBundles })),
}));
我也试过这些网站: https://binarapps.com/blog/test-ajax-calls-in-react-component-lifecycle。 Jest/Enzyme Error: "Method 'setState' is only meant to run on a single node. 3 found instead." https://jestjs.io/docs/en/asynchronous
【问题讨论】:
-
请编辑您的代码,
goToUrl函数和bundlesUrl,它们来自哪里? -
‘goToUrl’ 只是一个导入来进行重定向的函数。 ‘bundlesUrl’ 也只是一个导入的变量,它只是一个字符串。
标签: javascript reactjs testing jestjs