#reactjs #jestjs
#reactjs #jestjs
Вопрос:
По какой-то причине я получаю эту ошибку:
Cannot spy the handleError property because it is not a function; undefined given instead
Я использую шпионский метод…
const spyHandleError = jest.spyOn(handleError, 'handleError');
…чтобы проверить, была ли вызвана функция HandleError:
expect(spyHandleError).toHaveBeenCalled();
Моя функция HandleError выглядит так:
import { reduxAction } from '../store/actions/auth';
export const handleError = (status, dispatch) => {
if(status === 403) {
return dispatch(reduxAction());
}
};
Почему я получаю эту ошибку и как я могу использовать метод spyOn для ее проверки?
Комментарии:
1. Не могли бы вы предоставить полный тестовый пример? Это помогло бы понять, что вы хотите протестировать.
Ответ №1:
При вызове метода jest.spyOn вы должны предоставить в качестве первого аргумента объект, содержащий метод, который вы хотите шпионить (документация).
Вероятно, вы импортируете метод HandleError, например:
import { handleError } from 'file-where-handle-error-is';
Следовательно, ваш импортированный HandleError является непосредственно функцией, а не объектом, который содержит функцию.
Чтобы решить вашу проблему, вы можете импортировать модуль, в котором находится HandleError, а затем имитировать метод HandleError:
const utils = require('file-where-handle-error-is');
const spyHandleError = jest.spyOn(utils, 'handleError');
Другим решением было бы смоделировать модуль, в котором находится HandleError, с помощью jest.mock:
jest.mock('../../../src/utils/handle-error', () => {
return {
handleError: jest.fn()
};
Ответ №2:
Если вы хотите шпионить за функцией, экспортируемой из файла, который содержит много других функций (например, вспомогательный файл), вы можете импортировать все функции как объект, например, так:
import * as errorHelpers from 'path/to/errorHelpers';
Затем вы можете настроить свой шпион следующим образом:
const spyHandleError = jest.spyOn(errorHelpers, 'handleError');