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.