intermediate

Testing Library

Тестируйте user-visible behavior через accessible queries, events, async assertions и components, rendered близко к real usage.

Testing Library поощряет тесты, похожие на действия пользователя: запрос по role, label или тексту; события; асинхронный UI через `findBy` и `waitFor`. Не тестируйте детали реализации — имена state, shallow output.

					await user.click(screen.getByRole('button', { name: /save/i }));
expect(await screen.findByText(/saved/i)).toBeInTheDocument();
				

Доступные запросы — ещё и проверка качества: если не можете найти элемент запросом, пользователь тоже может не дойти.

На интервью: объясните приоритет запросов (role > label > text) и чем `userEvent` отличается от `fireEvent`.

Типовые ошибки: `getByTestId` по умолчанию, отсутствие await для async, неверный запрос порталов.

Компромисс — чуть медленнее тесты против устойчивости к рефакторингу с сохранением UX.

Чеклист:

  • Предпочитайте `getByRole` и доступные имена.
  • Используйте `userEvent` для реалистичных действий.
  • Проверяйте видимый результат, не внутренний state.