Зачем нужны юнит-тесты в JavaScript
Урок объясняет, зачем разработчику автоматические тесты и что именно проверяет юнит-тест.
Юнит-тест — это код, который автоматически проверяет, что небольшой кусок программы (функция, модуль) работает так, как ожидается.
Проблема: код меняется, а проверять всё руками невозможно
Представьте функцию, которая считает скидку в корзине. Вы написали её, проверили в консоли, всё работает. Через месяц коллега добавляет купоны и случайно ломает расчёт для старых заказов. Никто не замечает, пока не приходит жалоба от клиента.
Ручная проверка не масштабируется: чем больше кода, тем больше сценариев нужно перепроверять после каждого изменения. Автоматические тесты запускают эти проверки за вас — за секунды и при каждом изменении.
Что даёт юнит-тестирование
- Регрессии ловятся сразу. Сломали старое поведение — тест краснеет ещё до коммита.
- Рефакторинг без страха. Можно смело переписывать код: если тесты зелёные, поведение не изменилось.
- Тесты как документация. Хороший тест показывает, как функцию вызывать и что она возвращает.
- Лучше дизайн. Трудно тестируемый код обычно плохо спроектирован — тесты подталкивают к чистым функциям.
Что такое «юнит»
Юнит (unit) — наименьшая осмысленная единица: чаще всего одна функция или один модуль. Юнит-тест проверяет её изолированно, без базы данных, сети и других модулей. Это делает тест быстрым и стабильным.
Идея теста на чистом JavaScript
Прежде чем подключать фреймворк, поймём суть. Тест — это просто проверка: «если вход такой, результат должен быть таким». Напишем крошечную проверку вручную.
function sum(a, b) {
return a + b;
}
function assert(condition, message) {
if (condition) {
console.log("\u2713 passed: " + message);
} else {
console.log("\u2717 FAILED: " + message);
}
}
assert(sum(2, 3) === 5, "2 + 3 равно 5");
assert(sum(-1, 1) === 0, "-1 + 1 равно 0");
assert(sum(0, 0) === 0, "0 + 0 равно 0");Вывод:
✓ passed: 2 + 3 равно 5 ✓ passed: -1 + 1 равно 0 ✓ passed: 0 + 0 равно 0
По сути любой фреймворк, включая Jest, делает то же самое: вызывает вашу функцию, сравнивает результат с ожиданием и сообщает об успехе или провале. Jest добавляет удобный синтаксис, понятные сообщения об ошибках, изоляцию и инструменты — но базовая идея именно такая.
Какие бывают тесты
| Тип | Что проверяет | Скорость |
| Юнит | отдельную функцию/модуль изолированно | очень быстрый |
| Интеграционный | несколько модулей вместе | средний |
| E2E (end-to-end) | всё приложение глазами пользователя | медленный |
Этот курс — про юнит-тесты (и немного интеграционные). Их пишут больше всего: они дешёвые, быстрые и дают самую быструю обратную связь.
Итог
- Юнит-тест автоматически проверяет, что маленький кусок кода работает правильно.
- Тесты ловят регрессии, упрощают рефакторинг и служат документацией.
- Суть теста — сравнить фактический результат с ожидаемым; Jest лишь делает это удобным.