Как я могу имитировать useQuery из react-fetching-library?

#reactjs #jestjs #react-testing-library

#reactjs #jestjs #react-testing-library

Вопрос:

Здравствуйте, как я могу издеваться над useQuery? У меня есть компонент контейнера, который отвечает за вызов API, и простой компонент пользовательского интерфейса для отображения данных для пользователя. Я получаю текущую ошибку

 console.error node_modules/@testing-library/react/dist/act-compat.js:52
Error: Error: connect ECONNREFUSED 127.0.0.1:80
  

Контейнер

 import React from 'react';
import { screen, waitForElement, getByText } from '@testing-library/react';
import { useQuery } from 'react-fetching-library';

import { render } from 'tests';
import tags from 'api/mocks/tags-response.json';

import { TrendingTagsContainer } from './TrendingTagsContainer';
jest.mock('react-fetching-library');

describe('TrendingTagsContainer component', () => {
  test('should render component with correct title and description', async () => {
    const action = jest.fn();
    const useQuery = jest.fn(action());
    useQuery.mockReturnValue({ loading: false, error: false, query: () => true, payload: { tags } });
    console.log(useQuery());
    const { getByText } = render(<TrendingTagsContainer />);
    await waitForElement(() => screen.getByText('#Testing react'));
    expect(screen.getByText('#Testing react')).toBeInTheDocument();
  });
});
  

Ответ №1:

Я думаю, вы можете просто издеваться над своим react-fetching-library модулем следующим образом:

 import { useQuery } from 'react-fetching-library';

jest.mock('react-fetching-library');

// Everything looks the same I guess

  

Комментарии:

1. Спасибо, однако это решение все еще пытается получить внешний api

2. Error: Error: connect ECONNREFUSED 127.0.0.1:80 at Object.dispatchError

3. Я не уверен, что useQuery будет вызываться несколько раз, поэтому попробуйте издеваться все время, а не только один раз, используя mockImplentation

4. Это находится в верхней части файла, это помогло с устранением ошибки при вызове api. Спасибо!

5. Да, у меня нет ошибки с отказом в подключении, теперь это всего лишь проблема с тестовой оболочкой, большое вам спасибо.