К содержанию

Wiki · Технологии разработки

Jest

Содержание 5 разделов

    Jest – это фреймворк для автоматических юнит-тестов кода на JavaScript и TypeScript. Разработчик описывает, какой результат должна вернуть функция, а Jest запускает эти проверки и сообщает, где ответ разошёлся с ожидаемым.

    Владелец сайта Jest не увидит: он работает у разработчиков и на сервере сборки. Но если подрядчик говорит «у нас код покрыт тестами на Jest», это значит, что часть ошибок ловится до того, как обновление попадёт на сайт.

    Что такое юнит-тест на примере корзины

    Юнит-тест проверяет маленький кусок логики отдельно от всего остального: одну функцию, один компонент. Возьмём расчёт итоговой суммы в корзине со скидкой по промокоду. Тест на Jest выглядит так:

    test('промокод 10% от 5000 ₽', () => {
      expect(cartTotal(5000, 'SALE10')).toBe(4500);
    });

    Если через полгода кто-то перепишет расчёт скидок и случайно сломает промокоды, тест упадёт сразу, ещё на компьютере разработчика. Без него ошибку заметил бы покупатель, у которого не сработала скидка.

    Jest создали в Facebook, в 2022 году Meta передала его в OpenJS Foundation, и теперь проект развивает сообщество. Он работает с TypeScript, Node.js, React, Vue и Angular. На октябрь 2026 года актуальна ветка Jest 30.

    Что Jest умеет кроме простых проверок

    • Моки. Тест подменяет внешние сервисы заглушками: платёжный шлюз, CRM, API доставки. Логика проверяется, а настоящий платёж не уходит.
    • Снимки (snapshots). Jest запоминает, как выглядел результат, например разметка компонента, и сообщает, если он изменился.
    • Параллельный запуск. Тесты идут в отдельных процессах, поэтому сотни проверок проходят за минуты.
    • Покрытие кода. С флагом --coverage Jest показывает, какие строки и ветки кода тесты хотя бы раз выполнили.

    Почему 100% покрытия не гарантирует, что сайт работает

    Покрытие говорит, какой код запускался во время тестов, но не говорит, проверили ли его осмысленно. Можно вызвать функцию и ничего не сравнить: строка засчитается в покрытие, а ошибку тест не поймает.

    Полезнее спросить подрядчика, что именно покрыто. Деньги, скидки, расчёт доставки, права доступа в личном кабинете: эту логику стоит проверять тестами в первую очередь. Покрывать тестами вёрстку промо-блока, которую через месяц выбросят, смысла мало.

    Сравнение: какие части кода стоит покрывать юнит-тестами на Jest в первую очередь, а где тесты почти не дают пользы
    Что покрывать тестами в первую очередь

    Чем юнит-тесты на Jest отличаются от e2e-тестов

    Jest проверяет детали по отдельности. Сквозные (e2e) тесты, например на Playwright, открывают настоящий браузер и проходят путь покупателя целиком: каталог, корзина, оформление заказа.

    Юнит-тесты (Jest)E2E-тесты (Playwright)
    Что проверяютфункцию или компонентсценарий на живом сайте
    Скоростьсотни тестов за минутыкаждый сценарий дольше
    Где ошибкавидно сразу, до строкинужно искать, что сломалось
    Что пропускаютполомки на стыке частейредкие ветки логики

    Обычно делают так: много быстрых юнит-тестов на логику и несколько e2e-сценариев на главные пути, через которые идут деньги. Ручное тестирование сайта перед релизом они не отменяют.

    Схема: юнит-тесты на Jest проверяют функции с заглушками, а e2e-тесты на Playwright проходят путь покупателя в браузере
    Где работают Jest и e2e-тесты

    Тесты имеют смысл, только если их запускают автоматически при каждом изменении кода, например в пайплайне GitLab CI/CD после коммита в Git. Тесты, которые лежат в репозитории и не запускаются, быстро устаревают и начинают падать без причины.

    Покрытие и надёжность тестов

    Какой процент покрытия тестами просить у подрядчика?

    Единой нормы нет, и требование вроде 80% по всему проекту легко выполнить формально. Надёжнее договориться, что расчёт цен, скидок, доставки и права доступа покрыты тестами всегда, а отчёт о покрытии прикладывают к релизу. Ещё полезно правило: если нашли ошибку на сайте, сначала пишут тест, который её воспроизводит, и только потом исправляют. Так одна и та же ошибка не возвращается после следующего обновления.

    Почему тесты на Jest проходят, а на сайте всё равно ошибка?

    Юнит-тесты проверяют части кода по отдельности и с заглушками вместо внешних сервисов. Ошибка на стыке, например API вернул другой формат или сломалась вёрстка кнопки, в них не видна. Её ловят e2e-тесты в браузере и ручная проверка.

    Когда тесты на Jest не окупятся?

    На сайте-визитке почти нет логики для проверки кодом. Тесты окупаются там, где есть расчёты и сценарии с деньгами, а сайт часто дорабатывают: в магазине, личном кабинете, сервисе.

    Где запускать тесты Jest, чтобы о них не забывали?

    В конвейере сборки: при каждом изменении кода тесты запускаются автоматически, и выкладка останавливается, если хоть один упал. Запуск только на компьютере разработчика ненадёжен: о тестах вспоминают перед релизом, а то и после.

    Если проект на JavaScript или TypeScript уже работает, берём его на доработку и техническую поддержку: проверяем, какие тесты есть, и добавляем их на расчёты и сценарии, через которые идут заказы.

    Источники

    Остались вопросы по теме «Jest»?

    Напишите нам в Telegram или MAX. Ответит специалист, который отвечает за эту тему, или руководитель проектов в рабочее время.

    Дмитрий КолесниковОтвечает по темеДмитрий КолесниковWeb-разработчик

    Посчитайте стоимость проекта за 2 минуты

    Калькулятор соберёт смету по нашим тарифам: сайт, дизайн, интеграции и поддержка.