Test then () внутри обещания вызова API - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь проверить функцию, которая является вызовом / обещанием API, поэтому я могу проверить состояние внутри then, используя шутку, но, похоже, не могу понять, что делать. Я пытался смоделировать файл и функцию, чтобы вернуть обещание, но получаю сообщение об ошибке 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));
  };`

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: «Метод setState» предназначен для запуска только на одном узлеВместо этого найдено 3. " https://jestjs.io/docs/en/asynchronous

1 Ответ

0 голосов
/ 07 ноября 2019

Я решил, что мне пришлось импортировать мою функцию вызова API следующим образом:

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

Поскольку эта функция использовала axios, я должен был это сделать. Я сделал это так:

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

В своем тесте я сделал его асинхронным, и я мог ждать ответа этой функции.

const fetchedBundles = await fetchBundlesFromApi(
  'params',
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...