无法测试Redux异步操作

时间:2019-07-01 21:40:09

标签: javascript reactjs redux react-redux

我无法测试以下异步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调用,dispatchgetState()方法。模拟的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 :(得分:0)

在操作代码中,必须使用return语句来返回axios promise的结果。

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
        })
    }
}