i18n с ожиданием не загружается в библиотеку тестирования React

#reactjs #react-testing-library #fallback #react-suspense

Вопрос:

Я использую i18n, чтобы мое приложение было многоязычным. Кажется, это работает нормально, за исключением случаев, когда я тестирую приложение.

Я визуализирую компонент, названный ProjectNavigation в моем тесте. Этот компонент использует крючок useTranslation для перевода некоторых слов в навигационной панели моего проекта.

 import React from 'react';
import {
  render,
  screen,
} from '@testing-library/react';
import ProjectNavigation from '../pages/ProjectNavigation';

test('Checks to see if project navigation is rendered', () => {
  render(
    <React.Suspense fallback="Loading...">
      <ProjectNavigation useSuspense={false} />
    </React.Suspense>,
  );

  expect(screen.getByRole('navigation')).toBeVisible();
});
 

Когда я визуализирую с ожиданием, единственное, что загружается, — это запасной вариант, который в настоящее время установлен в «Загрузка…».

Я пробовал использовать useSuspense={false} при рендеринге, но тест не запускается, и я получаю эту ошибку:

 ProjectNavigation suspended while rendering, but no fallback UI was specified.

Add a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.
 

Похоже, компонент не способен к визуализации, и именно поэтому он показывает только запасной вариант.
Кто-нибудь знает, как справиться с тем, что компонент не может отображаться?

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

1. вам, вероятно, понадобится такая настройка: testing-library.com/docs/react-testing-library/setup

2. Вы пробовали использовать waitFor в своем утверждении? Т. е., await waitFor(() => expect(screen.getByRole('navigation')).toBeVisible()); .

3. waitFor кажется, все работает хорошо, так как у компонента теперь есть время для рендеринга, большое вам спасибо!