Это структура моего проекта (create-реагировать-приложение):
Содержимое /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__, чтобы другие тесты могли использовать его и для вас.
Как я могу это сделать?