Ваш диспетчер-обработчик фактически является фабрикой обработчика действий. В , вы создаете новую функцию. Возвращенные функции задают как параметр и вызывают код, который вы показываете. Это означает, что ваш тестовый код никогда не вызовет каких-либо функций шпиона, поскольку созданная функция никогда не вызывается. let dispatchMock = jest.fn(); // create a mock function actionHandler[FETCH_REMOTE](slug)(dispatchMock);
actionHandler
Я думаю, вам нужно будет создать функцию mock actionCreator
и сделать что-то вроде этого:
actionFactories
РЕДАКТИРОВАТЬ:
Для меня ваш thunks
взгляд больше похож на actionCreater
, как его обычно называют в терминах redux, хотя я лично предпочитаю их называть, actionHandler
потому что это они: фабрики, которые создают действия.
Когда вы используете action
(?) Ваш (который вводит в заблуждение ) не создает напрямую, а выполняет другую функцию, которая вызывается, как только будет отправлено действие. Для сравнения, регулярный actionCreator выглядит следующим образом:updateFilter: (filter) => ({type: actionNames.UPDATE_FILTER, payload: {filter: filter}}),
actionHandler
action
actionFactories
А, с другой стороны, реагирует на отправленные действия и оценивает их полезную нагрузку. const actionFactories = { fetchRemote(slug): (slug) => { return async dispatch => { dispatch(loading()); console.log(fetch()); // Displays the default fetch promise result let response = await fetch(Constants.URL + slug); var responseAction; if (/* determine success of response */) { responseAction = actionFactories.fetchSuccessful(response); } else { responseAction = actionFactories.fetchFailed(); } dispatch(responseAction); }; } fetchFailed(): () => ({type: FETCH_FAILED, }), fetchSuccessful(response): () => ({type: FETCH_FAILED, payload: response }) };
Вот что я сделал бы в вашем случае:
Создайте новый объект, названный FETCH_FAILED
так:
FETCH_SUCCESSFUL
Создайте actionHandler console.log
и fetch
обновите хранилище на основе ответа.
BTW: Ваше console.log
заявление не имеет особого значения для меня, поскольку fetch
просто возвращает обещание.