> Что такое Jest (JavaScript)

Уровень: junior · Роль: frontend · Категория: Технические вопросы

Компании: Сбер

Стек: JavaScript

> Пример ответа

Короткий ответ

Jest - это JavaScript-фреймворк для тестирования, разработанный Facebook. Он предоставляет всё необходимое для написания unit-тестов: встроенный test runner, expect-assertions, моки и coverage reports. Jest работает "из коробки" с React, Node.js и TypeScript, не требуя дополнительной конфигурации для большинства проектов. Его ключевые особенности - скорость выполнения тестов, простота использования и мощные возможности изоляции кода через автоматическое мокирование модулей.

Подробное объяснение

Jest - это среда тестирования, которая объединяет в себе несколько компонентов:

  • test runner - запускает тесты, управляет их порядком и параллельным выполнением
  • assertion library - предоставляет функции для проверки ожидаемых результатов (expect, toBe, toEqual и т.д.)
  • mocking system - позволяет заменять реальные модули, функции или таймеры на заглушки
  • code coverage - встроенный инструмент для измерения покрытия кода тестами

Jest использует концепцию "snapshot testing" для проверки UI-компонентов и автоматически создаёт файлы с эталонными результатами. Он поддерживает работу с асинхронным кодом через promises, async/await и callbacks. Фреймворк интегрируется с популярными инструментами (Babel, TypeScript, Webpack) и может быть расширен через custom matchers и reporters.

На практике

В проектах Jest обычно настраивается через jest.config.js или поле jest в package.json. Основные сценарии использования:

  • тестирование React-компонентов с помощью @testing-library/react
  • проверка утилитарных функций и бизнес-логики
  • тестирование API-запросов с моками fetch или axios
  • snapshot-тестирование для отслеживания изменений в UI

Для запуска тестов используется команда jest или npx jest. Jest автоматически находит файлы с расширениями .test.js, .spec.js или файлы в папке __tests__. Фреймворк поддерживает watch mode (--watch), который перезапускает тесты при изменении файлов.

Пример кода

JAVASCRIPT
// math.js
export const sum = (a, b) => a + b;
export const fetchData = async (url) => {
const response = await fetch(url);
return response.json();
};
// math.test.js
import { sum, fetchData } from './math';
test('sum adds two numbers', () => {
expect(sum(1, 2)).toBe(3);
expect(sum(-1, 1)).toBe(0);
});
test('fetchData returns data', async () => {
global.fetch = jest.fn(() =>
Promise.resolve({ json: () => Promise.resolve({ id: 1 }) })
);
const data = await fetchData('/api/user');
expect(data).toEqual({ id: 1 });
expect(fetch).toHaveBeenCalledWith('/api/user');
});

Как отвечать на собеседовании

Начни с краткого определения Jest как фреймворка для тестирования JavaScript. Затем перечисли его основные возможности: встроенный test runner, expect-assertions, моки и coverage. Упомяни, что Jest популярен в React-экосистеме, но подходит для любых JS-проектов. Приведи простой пример теста функции и покажи, как использовать mock для изоляции внешних зависимостей. Если спросят про настройку, скажи, что для большинства проектов достаточно базовой конфигурации, а для сложных случаев есть jest.config.js. Не углубляйся в детали реализации, если не просят.

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

Интервьюер оценивает:

  • понимание базовых концепций тестирования (unit-тесты, моки, assertions)
  • знание синтаксиса Jest (describe, test, expect, toBe, toEqual)
  • умение объяснить, зачем нужны моки и как они работают
  • способность написать простой тест для функции или компонента
  • осведомлённость о snapshot-тестировании и coverage

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

  • Путать toBe и toEqual: toBe проверяет строгое равенство (===), toEqual - глубокое сравнение объектов
  • Забывать очищать моки между тестами с помощью jest.clearAllMocks() или beforeEach
  • Тестировать слишком много в одном тесте - каждый тест должен проверять одну конкретную вещь
  • Использовать реальные API-запросы вместо моков, что делает тесты медленными и нестабильными
  • Не учитывать асинхронность: забывать async/await или done() в тестах с промисами

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью