Тестирование асинхронных действий mapDispatchToProps с помощью Jest / Enzyme выдает ошибку - PullRequest
1 голос
/ 05 июня 2019

Я пытаюсь проверить свои действия mapDispatchToProps при отправке асинхронной функции. Я почти перепробовал все возможные решения, которые нашел, и пока ничего не получалось. Я всегда получаю одну и ту же ошибку:

Я получаю эту ошибку: Ошибка типа: store.dispatch (...). Тогда это не функция

Я попробовал решение, включенное в redux-mock-store https://github.com/dmitry-zaets/redux-mock-store. Я включил свое промежуточное ПО в mockStore, но это не помогло устранить проблему.

Я попробовал решение, предложенное Майклом Пейпером, здесь Тестирование отправленных действий в Redux thunk с Jest .

Мы создали функцию для создания mockStore, поэтому я попытался создать mockStore непосредственно в моем тестовом файле, но они оба вернули одну и ту же ошибку.

Я не могу описать все решения, которые я здесь пробовал, потому что это заняло бы у меня недели, но это дает вам представление.

Вот код для моего теста:

describe('Component async actions', () => {
        const middlewares = [thunk, queryMiddleware];
        const createMockStore = configureStore(middlewares);
        const store = createMockStore();

        afterEach(() => {
            jest.clearAllMocks();
        });

        const someData = {};

        const expectedActions = { 
            type: ADD_DATA,
            payload: someData
        };

        it('should handle addData', () => {
            return store.dispatch(actions.addData(someData)).then(() => {
                expect(store.getActions()[0]).toEqual(expectedAction);
            });
        });
 });

Вот моя карта DispatchToProps:

function mapDispatchToProps(dispatch) {
    return {
        addData: data => dispatch(addData(data))
            .then(({ status }) => {
                dispatch(showNotification({ status }));
            }),
    };
};

Я хотел бы, по крайней мере, иметь возможность добраться до ожидаемой части и исправить это, если в моем тесте есть какая-либо ошибка, но я не могу пройти dispatch (). Then

Опять же, вот ошибка, которую я получаю каждый раз: TypeError: store.dispatch (...). Тогда это не функция

Заранее спасибо!

1 Ответ

0 голосов
/ 13 июня 2019

Я не знаю, получит ли кто-нибудь эту проблему, но я нашел решение.

Прежде всего, мне пришлось добавить промежуточное программное обеспечение Thunk в мой createStore из redux-mock-store.

import thunk from 'redux-thunk';

...

const createMockStore = createStore([thunk]);

Затем я сделал макет моей функции addData следующим образом:

import { addData } from 'path/to/addData';

...

jest.mock('path/to/addData');

и я добавил этот код в свой тест:

addData.mockReturnValue(() =>
        new Promise((resolve) => resolve({ status: 200 }));
        ));

Работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...