Я пытался написать тесты, чтобы проверить вызов axios, но теперь мне нужно протестировать часть catch
.
Я смог сделать это, посмеиваясь над аксиосами, но не могу показатьсячтобы получить способ проверить улов. Я следовал за многими различными примерами из переполнения стека и Интернета.
jest.mock('axios', () => jest.fn(() => Promise.resolve({ data: mockData })));
, но это всегда будет возвращать хороший результат, поэтому не могу проверить улов. Кусок кода, который я хочу проверить: goToUrl()
- это просто window.location.assign(url)
, но импортированный.
fetchBundlesFromApi(params)
.then(({ data: { bundles } }) => {
updateBundles(bundles);
this.setState({ showUpdatingPrices: false });
})
.catch(() => goToUrl(bundlesUrl));
В моем тесте для .then()
части я делаю это:
const fetchedBundles = await fetchBundlesFromApi(
'?params',
);
expect(fetchedBundles.data).toEqual(mockData);
Однако, если я последую примеру, подобному этому Mocking Axios с Jest in React - функция mockне вызывается Я не могу вручную смоделировать get
, если я помещаю файл фиктивного аксиоса в папку __mocks__
, тогда большая часть тестового набора не пройдена, поэтому я просто хочу смоделировать его в этом одном тестовом файле.
вот один из примеров, которые я пытался сделать:
jest.mock('axios', () => ({
get: () => jest.fn(() => Promise.resolve({ data: mockData })),
default: () => jest.fn(() => Promise.resolve({ data: mockData })),
}));
, но ошибка тестов с TypeError: (0 , _axios.default) is not a function
РЕДАКТИРОВАТЬ:
Вот мойФункция fetchBundlesApi:
const fetchBundlesFromApi = params => axios(`${bundleRoute}/bundles${params}`);
РЕДАКТИРОВАТЬ: тест поймать
it('should redirect if api fails', async () => {
const networkError = new Error('Some network error');
axios.mockRejectedValueOnce(networkError);
const goToUrl = jest.fn();
let error;
try {
await fetchBundlesFromApi('?params');
} catch (err) {
error = err;
}
expect(error).toEqual(networkError);
expect(goToUrl).toHaveBeenCalled();
});
в моем компоненте я импортирую goToUrl
, например:
import { goToUrl } from 'Helpers';