Тестирование проблем, если были вызваны асинхронные модули Redux-Toolkit

#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 , но не кажется идеальным добавлять зависимость, которая будет использоваться только для теста.