我不知道为什么,但测试失败了Expected mock function to have been called.
。我应该如何设置addFundingSource
模拟来调用它?我不能jest.mock
像其他模块一样使用整个模块(例如jest.mock('../../../../_helpers/alerts');
),因为其余功能也从该模块中使用。
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);
}
}
};
测试
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);
});
});
});