Что такое 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 vitestVitest автоматически найдёт все файлы с расширением .test.ts или .spec.ts.
Когда использовать
Vitest идеально подходит для:
- Новых проектов на Vite: мгновенная интеграция без конфигурации.
- Миграции с Jest: Vitest имеет схожий API, что упрощает переход.
- Тестирования TypeScript-библиотек: полная поддержка декораторов, дженериков и сложных типов.
- CI/CD пайплайнов: высокая скорость выполнения экономит время в автоматических сборках.
Избегайте Vitest, если ваш проект требует старых версий Node.js (ниже 14) или вы используете специфические плагины Jest, несовместимые с Vite.
Заключение
Vitest — это современный, быстрый и TypeScript-дружественный инструмент для тестирования. Он устраняет многие недостатки Jest, такие как медленный запуск и сложная настройка TypeScript. Если вы работаете с TypeScript и цените скорость разработки, Vitest станет отличным выбором.