Jest — это мощный инструмент для тестирования JavaScript-кода, разработанный Facebook. Он особенно популярен в экосистеме React, но может использоваться и с другими библиотеками/фреймворками.
Тест-раннер (Test Runner)
Запускает тесты и предоставляет отчет о результатах
Моки (Mocks)
Позволяет создавать mock-функции и модули для изолированного тестирования
Снимки (Snapshots)
Тестирование React-компонентов через сравнение с "слепками" (snapshots)
Измерение покрытия (Code Coverage)
Показывает процент кода, покрытого тестами
Тестирование отдельных функций или модулей:
// sum.js
function sum(a, b) {
return a + b;
}
// sum.test.js
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
Пример с React Testing Library:
import { render, screen } from '@testing-library/react';
import Button from './Button';
test('renders button with correct text', () => {
render(<Button>Click me</Button>);
const buttonElement = screen.getByText(/click me/i);
expect(buttonElement).toBeInTheDocument();
});
import renderer from 'react-test-renderer';
import Link from '../Link';
test('Link renders correctly', () => {
const tree = renderer
.create(<Link page="http://example.com">Example</Link>)
.toJSON();
expect(tree).toMatchSnapshot();
});
Нулевая конфигурация (Zero-configuration)
Работает "из коробки" в create-react-app проектах
Быстрая работа
Использует умное кэширование и параллельный запуск тестов
Интуитивный API
Простые в использовании matchers (проверки):
toBe()
toEqual()
toMatchSnapshot()
Интеграция с Babel/TypeScript
Поддержка современных JavaScript-функций
// Проверка равенства
expect(2 + 2).toBe(4);
// Проверка объекта
expect({a: 1}).toEqual({a: 1});
// Проверка массива
expect(['a', 'b']).toContain('a');
// Проверка исключений
expect(() => { throw new Error() }).toThrow();
Для React-проектов, созданных через create-react-app, Jest уже настроен. Для ручной настройки:
npm install --save-dev jest
{
"scripts": {
"test": "jest"
}
}
npm test
# Или для наблюдения:
npm test -- --watch
Jest — это полнофункциональный фреймворк для тестирования JavaScript-кода, который особенно удобен для React-приложений. Он предоставляет все необходимые инструменты для unit-тестов, интеграционных тестов и тестирования компонентов, помогая поддерживать качество кода на высоком уровне.