Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 412новых вакансий за сутки·55 411вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 671
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 396 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python8 728
  • Облачные технологии6 606
  • QA вакансии2 165
  • Android1 317
  • Инженер данных878
  • Продакт-менеджер314

Разработка

  • iOS1 229
  • Backend вакансии1 210
  • AI вакансии545
  • Fullstack вакансии500
  • Frontend вакансии422
  • Mobile вакансии28

По стеку

  • Go5 192
  • Java3 112
  • Kotlin1 085
  • Node.js992
  • Rust846
  • .NET660
  • PHP319
  • C++266
  • C#208

DevOps и инфраструктура

  • Kubernetes3 904
  • Linux-инфраструктура2 843
  • DevOps вакансии2 684
  • Terraform / IaC2 162
  • Мониторинг и Observability1 062
  • CI/CD921
  • SRE303
  • Кибербезопасность31

Аналитика и данные

  • Аналитик данных537
  • Data Scientist445
  • Бизнес-аналитик402
  • Системный аналитик68

Другие направления

  • Проджект-менеджер103
  • UI/UX дизайн70
  • Ручное тестирование14

По регионам

  • Вакансии в США26 186
  • Вакансии в Европе10 369
  • Работа в России3 628
  • Вакансии в Канаде2 306

По формату

  • Удалённые вакансии43 484
  • Релокация в США26 186
  • Гибридная работа5 597
  • Офисная работа4 383

По уровню

  • Senior вакансии22 724
  • Middle вакансии11 726
  • Junior вакансии3 874

Сейчас нанимают

Все компании
  • Rakuten189 вакансий
  • Wise186 вакансий
  • ASML164 вакансии
  • Grab135 вакансий
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen26 вакансий
  • Monzo19 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К подготовке по вакансии←К теме ReactВсе вопросы
ReactMiddleТеория

Как тестировать React-компоненты? В чём разница между unit, integration и e2e тестированием?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Unit-тесты проверяют изолированные функции/компоненты, integration — взаимодействие нескольких частей вместе, e2e — весь пользовательский сценарий в реальном браузере. Для React типичный стек: Vitest + React Testing Library (unit/integration) и Playwright (e2e).

Unit-тест: хук useCounter

// useCounter.test.ts
import { renderHook, act } from '@testing-library/react';
import { useCounter } from './useCounter';

test('increment increases count', () => {
  const { result } = renderHook(() => useCounter(0));
  act(() => result.current.increment());
  expect(result.current.count).toBe(1);
});

Три уровня тестирования

  • Unit: одна функция, хук или компонент изолированно. Зависимости мокируются. Быстро, дёшево, хрупко при рефакторинге внутренностей.
  • Integration: несколько компонентов/модулей в связке. Реальный DOM через jsdom, реальная логика, только внешние сервисы (API) мокируются. Баланс скорости и уверенности.
  • E2E: реальный браузер, реальный бэкенд (или MSW-заглушка). Медленно, но проверяет весь путь пользователя.

Инструменты

  • Vitest — быстрый test runner совместимый с Jest API, нативно понимает ESM и Vite-конфиг.
  • React Testing Library (RTL) — рендерит компоненты в jsdom, поощряет запросы через роли/текст, а не через CSS-классы.
  • MSW (Mock Service Worker) — перехватывает fetch/XHR на уровне Service Worker или Node; одни и те же хендлеры работают в браузере и в тестах.
  • Playwright — e2e в Chromium/Firefox/WebKit, поддерживает трассировку, видеозапись, CI-режим.

Integration-тест: форма с API-запросом

// LoginForm.test.tsx
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { http, HttpResponse } from 'msw';
import { setupServer } from 'msw/node';
import { LoginForm } from './LoginForm';

const server = setupServer(
  http.post('/api/login', () =>
    HttpResponse.json({ token: 'abc' })
  )
);

beforeAll(() => server.listen());
afterEach(() => server.resetHandlers());
afterAll(() => server.close());

test('submits credentials and shows welcome', async () => {
  render(<LoginForm />);
  await userEvent.type(screen.getByLabelText('Email'), 'user@test.com');
  await userEvent.type(screen.getByLabelText('Password'), 'secret');
  await userEvent.click(screen.getByRole('button', { name: /войти/i }));
  expect(await screen.findByText(/добро пожаловать/i)).toBeInTheDocument();
});

E2E-тест на Playwright

// e2e/login.spec.ts
import { test, expect } from '@playwright/test';

test('user can log in', async ({ page }) => {
  await page.goto('/login');
  await page.getByLabel('Email').fill('user@test.com');
  await page.getByLabel('Password').fill('secret');
  await page.getByRole('button', { name: /войти/i }).click();
  await expect(page).toHaveURL('/dashboard');
  await expect(page.getByText('Добро пожаловать')).toBeVisible();
});

Когда что применять

  • Чистая бизнес-логика, утилиты, хуки → unit.
  • Форма с валидацией + вызов API → integration с MSW.
  • Критичный пользовательский путь (регистрация, оплата) → e2e.

Подводные камни

  • Тест через getByTestId привязывает тест к вёрстке, а не к поведению — предпочитайте getByRole, getByLabelText.
  • Мок реализации, а не контракта: если мокируете внутренний модуль, тест не поймает смену API.
  • Забытый await в RTL: асинхронные запросы надо ждать через findBy* или waitFor, иначе тест проходит зелёным, не дождавшись ответа.
  • Нет server.resetHandlers(): обработчики MSW «протекают» между тестами.
  • Слишком много e2e: медленные, нестабильные на CI. Пирамида тестирования: много unit, меньше integration, мало e2e.
  • act() warnings: обновления состояния вне act вызывают предупреждения и могут скрывать реальные баги.
  • jsdom не поддерживает layout: CSS-позиционирование, getBoundingClientRect, resize-события работают неправильно — для этого нужен e2e.

Типичные ошибки

  • Тестировать имплементацию (state, имена хуков) вместо поведения.
  • Мокать всю сеть в integration-тестах и пропускать ошибки сериализации.
  • Гонять e2e на каждый push и убивать CI-бюджет.

Что проверяет интервьюер

  • Различает ли цели уровней тестов.
  • Знает ли актуальные библиотеки (RTL, Vitest, MSW, Playwright).
  • Понимает ли принцип «testing user behavior».

Как вы знаете этот вопрос?

Проверить себя по теме React →

Источники

  • https://react.dev/learn/escape-hatches
  • https://react.dev/reference/react/StrictMode
←Предыдущий вопросВ чём разница между SSR (server-side rendering) и SSG (static site generation) в React?Следующий вопрос→Что такое Suspense в React? Как он работает с lazy loading и получением данных?

Связанные темы

Reactfrontend-qualitytesting-strategy

Вакансии с этим навыком

React вакансии
  • AI Engineer / Fullstack-разработчик AI-решений
  • Frontend-стажёр (React / Next.js)
  • Software Engineer with React and Node.js
  • Senior Software Engineer with React and Node.js
  • Senior Data Engineer

Частые вопросы на собеседовании

  • Что такое хук useEffect и как работает его массив зависимостей?
  • Объясните хук useState. Какие типичные ошибки возникают при обновлении состояния?
  • Объясните правила хуков. Почему хуки нельзя вызывать условно?
  • В каких типах frontend-проектов React даёт реальный выигрыш, а где будет избыточен или неудачен?