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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 122
  • Облачные технологии14 088
  • QA вакансии3 457
  • Backend вакансии2 114
  • Инженер данных1 805
  • Продакт-менеджер1 262

Разработка

  • Android1 864
  • iOS1 697
  • Fullstack вакансии986
  • AI вакансии949
  • Frontend вакансии742
  • Mobile вакансии44

По стеку

  • Go8 660
  • Java6 537
  • Node.js2 020
  • .NET1 721
  • Kotlin1 614
  • Rust1 455
  • C#710
  • PHP681
  • C++571

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

  • Kubernetes7 769
  • DevOps вакансии6 052
  • Linux-инфраструктура5 493
  • Terraform / IaC4 266
  • CI/CD3 240
  • Мониторинг и Observability1 788
  • SRE567
  • Кибербезопасность453

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

  • Data Scientist1 141
  • Бизнес-аналитик927
  • Аналитик данных854
  • Системный аналитик153

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

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

По регионам

  • Вакансии в США44 266
  • Вакансии в Европе23 871
  • Вакансии в Канаде4 475
  • Работа в России3 922

По формату

  • Удалённые вакансии75 000
  • Релокация в США44 263
  • Гибридная работа12 377
  • Офисная работа7 078

По уровню

  • Senior вакансии42 642
  • Middle вакансии20 877
  • Junior вакансии6 721

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • 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 вакансии
  • Fullstack-разработчик (Middle+ / Senior)
  • Fullstack-разработчик
  • Senor Scala Engineer (#6032)
  • Engineering Manager, Developer Infrastructure
  • Propulsion Software Engineer (Falcon Engineering)

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

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