Jest для TypeScript: Полное руководство по тестированию

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Что такое Jest и зачем он нужен для TypeScript?

Jest — это мощный и популярный фреймворк для тестирования JavaScript и TypeScript, разработанный компанией Meta (Facebook). Он предоставляет всё необходимое для написания unit-тестов, интеграционных тестов и snapshot-тестов «из коробки»: assertion-библиотеку, моки, шпионы, таймеры и покрытие кода. Для TypeScript Jest особенно ценен, так как позволяет проверять типы во время выполнения тестов, что повышает надёжность кода. Использование Jest с TypeScript помогает разработчикам быстрее находить ошибки, рефакторить код с уверенностью и поддерживать высокое качество проекта.

Установка и настройка

Для начала работы установите Jest и необходимые типы через npm или yarn:

npm install --save-dev jest @types/jest ts-jest typescript

Затем инициализируйте конфигурацию Jest:

npx ts-jest config:init

Это создаст файл jest.config.js с настройками для TypeScript. Убедитесь, что в tsconfig.json установлен "module": "commonjs" или используйте ts-node для ESM.

Основные функции

  • describe и it/test — группировка и написание тестов.
  • expect — assertion-функция с множеством матчеров (toBe, toEqual, toContain, toThrow и др.).
  • beforeEach / afterEach — хуки для подготовки и очистки окружения.
  • jest.mock — автоматическое мокирование модулей.
  • jest.spyOn — слежение за вызовами функций.
  • Snapshot-тестирование — сравнение вывода компонентов.
  • Покрытие кода — встроенная утилита --coverage.

Пример кода на TypeScript

// math.ts
export const add = (a: number, b: number): number => a + b;
export const divide = (a: number, b: number): number => {
  if (b === 0) throw new Error('Division by zero');
  return a / b;
};

// math.test.ts
import { add, divide } from './math';

describe('Math functions', () => {
  test('adds two numbers correctly', () => {
    expect(add(2, 3)).toBe(5);
    expect(add(-1, 1)).toBe(0);
  });

  test('throws error when dividing by zero', () => {
    expect(() => divide(10, 0)).toThrow('Division by zero');
  });

  test('divides correctly', () => {
    expect(divide(10, 2)).toBe(5);
    expect(divide(9, 3)).toBeCloseTo(3);
  });
});

Когда использовать Jest с TypeScript?

  • Любые проекты на TypeScript — от небольших библиотек до крупных приложений.
  • Разработка с TDD — Jest отлично подходит для написания тестов до реализации.
  • Рефакторинг — чтобы убедиться, что изменения не сломали существующую логику.
  • CI/CD пайплайны — быстрый запуск тестов и проверка покрытия.
  • Тестирование React-компонентов — вместе с @testing-library/react.

Jest — это стандарт де-факто для тестирования TypeScript, благодаря простоте настройки, богатому API и отличной интеграции с современными инструментами.

Рекомендаций