Тестирование в TypeScript с Vitest

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

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

Начать курс

Что такое Vitest и зачем он нужен?

Vitest — это современная библиотека для unit-тестирования, ориентированная на экосистему Vite и TypeScript. Она создана как быстрая альтернатива Jest, но с полной поддержкой TypeScript «из коробки» без дополнительной конфигурации. Vitest использует нативный парсер TypeScript и модульную систему Vite, что делает тесты мгновенными даже в больших проектах.

Установка

Установите Vitest в ваш TypeScript-проект через npm:

npm install -D vitest

Дополнительно, если вы используете React или Vue, установите связанные утилиты:

npm install -D @testing-library/react @testing-library/jest-dom

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

  • Скорость: тесты запускаются параллельно с использованием воркеров, что ускоряет выполнение до 10 раз по сравнению с Jest.
  • Совместимость с TypeScript: не требует ts-jest или babel — работает напрямую с .ts и .tsx файлами.
  • Встроенные моки и шпионы: функции vi.mock, vi.spyOn и vi.fn для изоляции кода.
  • Snapshot-тестирование: возможность сохранять и сравнивать снимки компонентов или данных.
  • Coverage: встроенная поддержка c8 или istanbul для отчётов о покрытии кода.

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

Напишем тест для простой функции сложения:

// math.ts
export function add(a: number, b: number): number {
  return a + b;
}

// math.test.ts
import { describe, it, expect } from 'vitest';
import { add } from './math';

describe('add function', () => {
  it('should add two positive numbers', () => {
    expect(add(2, 3)).toBe(5);
  });

  it('should handle negative numbers', () => {
    expect(add(-1, 1)).toBe(0);
  });

  it('should return zero for zero arguments', () => {
    expect(add(0, 0)).toBe(0);
  });
});

Запуск тестов:

npx vitest

Vitest автоматически найдёт все файлы с расширением .test.ts или .spec.ts.

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

Vitest идеально подходит для:

  • Новых проектов на Vite: мгновенная интеграция без конфигурации.
  • Миграции с Jest: Vitest имеет схожий API, что упрощает переход.
  • Тестирования TypeScript-библиотек: полная поддержка декораторов, дженериков и сложных типов.
  • CI/CD пайплайнов: высокая скорость выполнения экономит время в автоматических сборках.

Избегайте Vitest, если ваш проект требует старых версий Node.js (ниже 14) или вы используете специфические плагины Jest, несовместимые с Vite.

Заключение

Vitest — это современный, быстрый и TypeScript-дружественный инструмент для тестирования. Он устраняет многие недостатки Jest, такие как медленный запуск и сложная настройка TypeScript. Если вы работаете с TypeScript и цените скорость разработки, Vitest станет отличным выбором.

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