У меня проблемы с тестированием следующего асинхронного действия 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})
);
});
});