#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
кажется, все работает хорошо, так как у компонента теперь есть время для рендеринга, большое вам спасибо!