javascript - 在 promise API 调用 jest 中测试 then()

标签 javascript reactjs testing jestjs

我正在尝试测试一个函数,它是一个 api 调用/ promise ,因此我可以使用 jest 检查 then 中的状态,但似乎无法弄清楚该怎么做。我试过模拟文件和返回 promise 的函数,但出现错误 TypeError: (0 , _dataAccess.fetchBundlesFromApi) is not a function堆栈溢出有许多不同的答案,但似乎都没有用。这是我要测试的代码。我希望能够调用它,然后说是否可以检查状态或者是否有错误执行其他操作。以下是我尝试执行的代码以及我尝试过的模拟。

getLatestPrices = params => {
    const { updateBundles } = this.props;

    fetchBundlesFromApi(params)
      .then(({ data: { bundles } }) => {
        updateBundles(bundles);
        this.setState({ showUpdatingPrices: false });
        window.TemplateCalculator.reload();
      })
      .catch(() => goToUrl(bundlesUrl));
  };`

fetchBundlesFromApiimport { fetchBundlesFromApi } from '../../../../dataAccess'; 这是一个 axios 调用:

const fetchBundlesFromApi = params => axios(`${bundleRoute}/bundles${params}`);

export { fetchBundlesFromApi };

这是我试过的mocking。

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

最佳答案

我发现我必须像这样导入我的 api 调用函数:

import { fetchBundlesFromApi } from '../../../../dataAccess';

由于该函数使用的是 axios,所以我不得不模拟它。我是这样做的:

jest.mock('axios', () => jest.fn(() => Promise.resolve({ data: mockBundles })));

在我的测试中,我将其设置为异步,我可以等待该函数响应。

const fetchedBundles = await fetchBundlesFromApi(
  'params',
);

关于javascript - 在 promise API 调用 jest 中测试 then(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58735624/

相关文章:

javascript - 使用 Request.JSON 将 html 数组作为 post 变量发送

javascript - this.setState 不是一个函数,为什么它不起作用?

javascript - 按钮输入类型提交不在 React 中使用 React Router 提交

javascript - 重新选择。 react 。 Reselect 获得最大性能的最佳使用方法是什么?

selenium - Web 驱动程序在检查元素的不可见性时不等待指定的时间限制

javascript - Vue Composition API - 无法向对象添加属性

javascript - 如何从都驻留在 React 组件上的函数调用函数

javascript - Angular 2 - 将组件限制为特定的父组件

ruby-on-rails - 在 Rails 3 中进行 attachment_fu 测试

php - 方法中的静态变量不会在实例未设置时重置