Тестирование запроса данных с помощью 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));
      });
  };
}


Ответы (0 шт):