Jest: Как смоделировать пользовательский модуль, который экспортируется из файла index.js? - PullRequest
2 голосов
/ 17 июня 2019

Это структура моего проекта (create-реагировать-приложение):

enter image description here

Содержимое /src/api/searchAPI.js:

import client from './client';

async function searchMulti(query, options = {}) {
  options.query = query;
  return await client.get('/search/multi', options);
}

export default {
  searchMulti
};

Содержимое /src/api/index.js:

import movieAPI from './movieAPI';
import personAPI from './personAPI';
import searchAPI from './searchAPI';
import configurationAPI from './configurationAPI';

export { movieAPI, personAPI, searchAPI, configurationAPI };

Импортирует компонент QuickSearch searchAPI и использует его для извлечения некоторых данных через Интернет.

Теперь мне нужно протестировать (с помощью response-testing-library ) компонент QuickSearch.

Итак, я хотел бы высмеять api модуль (экспортированный в /src/api/index.js) для использования фиктивной функции вместо searchAPI.searchMulti () .

Если я добавлю код ниже в / src /componentns / __ tests __ / QuickSearch.js, он работает просто отлично:

...
import { searchAPI } from '../../
...
...
jest.mock('../../api', () => {
  return {
    searchAPI: {
      searchMulti: jest.fn().mockResolvedValue({ results: [] })
    }
  };
});

...

it('some test', () => {
  searchAPI.searchMulti.mockResolvedValueOnce({ results: [] });

  const { queryByTitle, getByPlaceholderText } = renderWithRouter(
    <QuickSearch />
  );

  const input = getByPlaceholderText(/Search for a movie or person/i);

  expect(searchAPI.searchMulti).not.toHaveBeenCalled();

  act(() => {
    fireEvent.change(input, { target: { value: 'Aladdin' } });
  });

  expect(searchAPI.searchMulti).toHaveBeenCalledTimes(1);
});

Моя проблема в том, что я не хочу высмеивать api в каждом тестовом файле, который в этом нуждается.Вместо этого я хотел бы поместить api в папку __mocks__, чтобы другие тесты могли использовать его и для вас.

Как я могу это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...