我无法测试以下异步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()
方法。模拟的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})
);
});
});
答案 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
})
}
}