#reactjs #react-redux #jestjs #redux-toolkit
#reactjs #react-redux #jestjs #redux-toolkit
Вопрос:
Недавно я начал тестировать свое приложение и столкнулся с проблемами при попытке проверить useEffect
, выполняет ли компонент определенные asyncThunk
действия.
Мой тест (используется redux-mock-store
для хранилища):
it('should dispatch actions', () => {
expect.hasAssertions();
const useDispatchSpy = jest.spyOn(redux, 'useDispatch');
const mockDispatchFn = jest.fn();
useDispatchSpy.mockReturnValue(mockDispatchFn);
mount(
<Provider store={store}>
<Dashboard />
</Provider>,
);
expect(mockDispatchFn).toHaveBeenCalledTimes(4);
expect(mockDispatchFn).toHaveBeenCalledWith(fetchCurriculumPrefixes());
expect(mockDispatchFn).toHaveBeenCalledWith(fetchHeatmap(''));
expect(mockDispatchFn).toHaveBeenCalledWith(fetchCurriculumFromPrefix(''));
expect(mockDispatchFn).toHaveBeenCalledWith(syncTimetable({
timetable: [], timestamp: '',
}));
useDispatchSpy.mockClear();
});
Тест завершается неудачей с очень неинформативной ошибкой:
expect(jest.fn()).toHaveBeenCalledWith(...expected)
Expected: [Function anonymous]
Received
1: [Function anonymous]
2: [Function anonymous]
3: [Function anonymous]
Number of calls: 4
62 | expect(mockDispatchFn).toHaveBeenCalledTimes(4);
> 63 | expect(mockDispatchFn).toHaveBeenCalledWith(fetchCurriculumPrefixes());
| ^
Кажется, я не могу понять, как убедиться, что в компоненте вызываются определенные отправки. Тестирование самого thunk не является проблемой, поскольку это простой вызов API.
Любая помощь была бы замечательной. Заранее спасибо!
РЕДАКТИРОВАТЬ: тестирование без издевательской dispatch
функции приводит к redux-mock-store
выдаче ошибки: Actions must be plain objects. Use custom middleware for async actions.
Я могу попробовать протестировать, добавив redux-thunk
, но не кажется идеальным добавлять зависимость, которая будет использоваться только для теста.