PassFront
  1. PassFront
  2. База знаний
  3. Основы React

Как тестировать React приложение?

Основы React

Тестирование React-приложения строится пирамидой: много юнит- и компонентных тестов, меньше интеграционных, немного e2e. Современный подход: тестировать поведение, а не реализацию.

Инструменты

  • Vitest / Jest — раннер, ассерты, моки.
  • React Testing Library (RTL) — рендер компонентов и запросы «как пользователь»: по ролям, тексту, лейблам.
  • user-event — реалистичные действия пользователя.
  • MSW (Mock Service Worker) — мок API на уровне сети, а не функций.
  • Playwright / Cypress — e2e в настоящем браузере.

Компонентные тесты (основа)

test('добавляет товар в корзину', async () => {
  render(<ProductCard product={product} />);

  await userEvent.click(screen.getByRole('button', { name: /в корзину/i }));

  expect(screen.getByText(/добавлено/i)).toBeInTheDocument();
});

Принципы RTL:

  • запросы по доступным признакам (getByRole, getByLabelText) — тест заодно проверяет доступность;
  • не тестировать state и внутренние методы — только вход (props, действия) и выход (что видит пользователь);
  • асинхронность — await findBy..., а не таймеры.

Что тестировать чем

  • Чистая логика (утилиты, редьюсеры, селекторы) — обычные юнит-тесты, без рендера.
  • Кастомные хуки — renderHook из RTL.
  • Компоненты с данными — рендер с провайдерами (обёртка с QueryClient, стором, роутером) + MSW для API.
  • Критические пользовательские сценарии (логин, оформление заказа) — e2e Playwright.
  • Снапшот-тесты — ограниченно: хрупкие и мало говорят о поведении.

Коротко для собеседования

Стек: Vitest/Jest + React Testing Library + user-event + MSW, e2e — Playwright. Подход: тестировать как пользователь (роли/тексты, а не state и классы), логику выносить в чистые функции и покрывать юнитами, API мокать на уровне сети, e2e — только критические сценарии.

Другие вопросы раздела