Тестирование неполадок при асинхронном действии - PullRequest
0 голосов
/ 02 июля 2019

У меня проблемы с тестированием следующего асинхронного действия Redux.

export default function getBestPracticesInfo() {
    return function (dispatch, getState) {
        axios.get("testurl")
            .then(response => {
                return dispatch({type: "GET_BEST_PRACTICE", payload: response.data})
            }).catch(error => {
            return error
        })
    }
}

Я хотел бы просто проверить, что действие отправляет правильное действие с ожидаемой полезной нагрузкой.Для этого я высмеиваю вызовы axios, методы dispatch и getState().Метод mocked dispatch() возвращает обещание с данными, использованными для его вызова.Таким образом, я могу убедиться, что мое тестовое утверждение не сработает до того, как мое обещание axios будет выполнено.Однако происходит то, что action(dispatch, getState) в моем тесте возвращает неопределенное значение, и я озадачен, почему.Я ожидаю, что это вернет обещание.

describe('metaDataActions tests', () => {
    let mock;
    beforeEach(() => {
        mock = new MockAdapter(axios);
        mock.onGet('testurl').reply(200, {data: 'TEST BEST PRACTICE RESPONSE'});
        sessionStorage.clear();
    });

    it('should call getBestPracticesInfo', () => {
        const getState = ()=> {return {metaData: {meta: {api: {bestPractices: '/api/v1/best_practices'}}}}};
        const dispatch = jest.fn(info => {
            return new Promise(resolve => {
                resolve(info);
            })
        });
        const action = getBestPracticesInfo();
        action(dispatch, getState).then(res =>
            expect(res).toEqual({type: "GET_BEST_PRACTICES_INFO", payload: response.data})
        );
    });
});

1 Ответ

0 голосов
/ 03 июля 2019

В коде действия необходим оператор возврата для возврата результата обещания Axios.

export default function getBestPracticesInfo() {
    return function (dispatch, getState) {
        return axios.get("testurl")
            .then(response => {
                return dispatch({type: "GET_BEST_PRACTICE", payload: response.data})
            }).catch(error => {
            return error
        })
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...