I am not sure why but the test fails as it says Expected mock function to have been called.
. How should I setup the addFundingSource
mock to have it called? I can't jest.mock
the whole module like the others (for instance jest.mock('../../../../_helpers/alerts');
) since the rest of the functions are also used from that module.
fetchFundingSource.js
export const addFundingSource = () => {
...
}
export const fetchFundingSource = (history, onNewPaymentClose) => {
let config = {
....
};
return async (dispatch) => {
dispatch(fetchFundingSourceRequest());
try {
const response = await fetch(fundingSourceEndpoint, config);
const jsonResponse = await response.json();
if (!response.ok) {
showErrorAlert(jsonResponse);
dispatch(fetchFundingSourceError(jsonResponse));
throw new Error(response.statusText);
}
dispatch(fetchFundingSourceSuccess(jsonResponse.count, jsonResponse.results));
addFoundingSource(jsonResponse.results, history, onNewPaymentClose);
} catch (error) {
if (process.env.NODE_ENV === 'development') {
console.log('Request failed', error);
}
}
};
test
import configureMockStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import * as fundingSource from '../../../../dashboard/global/ducks/fetchFundingSource';
import { fundingSourceEndpoint } from '../../../../_api/companyHelpers';
import { createMemoryHistory } from 'history';
jest.mock('../../../../_api/companyHelpers');
jest.mock('../../../../_helpers/alerts');
jest.mock('../../../../_api/authHelpers');
const middlewares = [thunk];
const createMockStore = configureMockStore(middlewares);
describe('fetchFundingSource', () => {
beforeEach(() => { fetch.resetMocks(); });
const history = createMemoryHistory('/dashboard');
const onNewPaymentClose = {};
fundingSource.addFundingSource = jest.fn(); //Mock setup.
it('dispatches the correct actions on successful fetch request', () => {
const store = createMockStore({});
fetch.mockResponse(JSON.stringify({ count, results }));
const expectedActions = [
fetchFundingSourceRequestObject,
fetchFundingSourceSuccessObject
];
return store.dispatch(fundingSource.fetchFundingSource(history, onNewPaymentClose))
.then(() => {
expect(fundingSource.addFundingSource).toBeCalled(); //THIS FAILS
expect(store.getActions()).toEqual(expectedActions);
});
});
});