Closed panigrah closed 6 years ago
You could use https://github.com/arnaudbenard/redux-mock-store together with https://github.com/ctimmerm/axios-mock-adapter for testing and then check if your mock store contains your expected actions.
import configureMockStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
const MockApi = new MockAdapter(axios);
const middlewares = [thunk.withExtraArgument(axios)];
const mockStore = configureMockStore(middlewares);
const store = mockStore();
test('dispatches LOAD_STUFF_SUCCESS if everything works correctly', () => {
MockApi.onGet(BASE_URL).reply(200, {
stuff: 'stuff'
});
const expectedAction = { type: 'LOAD_STUFF_SUCCESS' };
return store.dispatch(loadStuff()).then(() => {
expect(
store.getActions().find(a => a.type === expectedAction.type)
).toBeDefined();
});
});
// If you need, you can test explicitly for _ERROR and _SUCCESS,
// but I would just rely on this library doing its job correctly.
test('dispatches LOAD_STUFF_ERROR if something goes wrong', () => {
MockApi.onGet(BASE_URL).reply(404);
const expectedAction = { type: 'LOAD_STUFF_ERROR' };
return store.dispatch(loadStuff()).then(() => {
expect(
store.getActions().find(a => a.type === expectedAction.type)
).toBeDefined();
});
});
And loadStuff()
is a regular action creator:
export const BASE_URL = 'https://example.com/api';
export const loadStuff = () => ({
type: 'LOAD_STUFF',
payload: {
request: {
url: BASE_URL
}
}
});
Hope this helps!
Hi, I am considering using this instead of redux-sagas to manage all my api calls. Sagas makes it easy to test actions and dispatches.
What is the recommended way to test my app when using redux-axios-middleware to make api calls?
thanks,