Тестирование запроса данных с помощью apollo client
У меня приложение react/redux/apollo.
Есть функция, которая диспатчит экшны и запрашивает данные с бэка. Хочу написать тест на то как отрабатывают экшны редакса. Но для этого нужно замокировать запрос. У них в доке показана либа fetch-mock, у меня не вышло с помощью нее замокать запрос, не перехватывает его.
Нашел еще либу graphql-query-test-mock с ней тоже не выходит, запрос внутри моей функции не перехватывается и не мокается.
Подскажите как перехватить запрос внутри моей функции и замокать его? В документации apollo вижу только описание как замокать запрос при тестировании реакт компонента через MockedProvider.
test.js
import configureMockStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import { QueryMock } from 'graphql-query-test-mock';
import { BACKOFFICE_URL } from 'constants/client';
import { SET_REGIONS, SET_REGIONS_LOADING } from '../../actionTypes';
import { getRegions } from '../regions';
const queryMock = new QueryMock();
const mockStore = configureMockStore([thunk]);
describe('Получение списка регионов', () => {
beforeEach(() => {
queryMock.setup(BACKOFFICE_URL);
});
it('Успешный запрос', () => {
queryMock.mockQuery(
{
name: 'regions',
},
{
data: {
regions: {
regions: [],
},
},
},
);
const expectedActions = [{ type: SET_REGIONS_LOADING }, { type: SET_REGIONS, payload: [] }];
const store = mockStore({ regions: [] });
return store.dispatch(getRegions()).then(() => {
expect(store.getActions()).toEqual(expectedActions);
});
});
});
getRegions.js
return (dispatch) => {
dispatch(setRegionsLoading());
return client
.query({
query: GET_REGIONS,
fetchPolicy: 'network-only',
})
.then((response) => {
const regionsData = response.data?.regions;
const regions = regionsData?.regions || [];
dispatch(setRegionsData(regions));
})
.catch((error) => {
graphqlError(error.message);
dispatch(setRegionsError(error.message));
});
};
}