Егор Урванов

Vitest или JestЧто выбрать для JavaScript-проекта и когда хватит QUnit

Vitest или Jest: настройка, место запуска, стиль проверок. Когда брать Vitest на Vite, оставить Jest или хватит QUnit в браузере. Таблица и вопросы.

создано · обновлено · 7 мин · · Спеки и контекст

Vitest или Jest: на проекте со сборщиком Vite берите Vitest, потому что он использует те же настройки, а если Jest уже работает, оставьте его. QUnit хватит, когда тесты должны идти прямо в браузере почти без настройки. Все три запускают автоматические тесты на JavaScript и отличаются тем, где живут и сколько настройки требуют.

Эта статья родилась из другой: про формальные модели на Quint и формальную верификацию. Названия QUnit и Quint похожи, и их легко спутать, поэтому я решил отдельно написать и про тестовые движки. Как Quint отличается от них, разобрано в сравнении Quint с тестами и TLA+.

Один и тот же тест, но три разных места жизниJestотдельная программарядом с проектомвсё нужное в комплектеVitestвстроен в сборщиксайта Viteнастройки общиеQUnitидёт в браузереи на серверелёгкий, без настроек● модель, люди, системы, данные  ● агент и харнесс

Что общего у Jest, Vitest и QUnit

Допустим, есть функция, которая складывает два числа. Тест записывает ожидание: для единицы и двойки ответ равен трём. Движок запускает функцию, сравнивает ответ с ожидаемым и сообщает, прошла проверка или упала. Тестов в проекте сотни, поэтому их запускают автоматически после каждой правки: если правка сломала то, что работало, тест падает, и это видно сразу. Все три движка делают именно это для кода на JavaScript, то есть запускают автоматические тесты.

В описаниях движков встретятся три слова. Снимок — сохранённый эталон большого результата, например готовой разметки страницы, с которым сравнивают новый результат. Подмена — временная замена настоящего кода заглушкой, например настоящей отправки письма, чтобы тест не ходил наружу. Покрытие — отчёт о том, какие строки кода тест хотя бы раз выполнил. Поэтому выбор между движками редко решает, будут ли у проекта тесты. Он решает, сколько всего нужно настраивать и где тесты запускаются.

Вывод
В этом примереJest, Vitest и QUnit отвечают на один и тот же вопрос: даёт ли готовая функция нужный ответ на заданные входы.
В общем случаеПравила системы и порядок событий они не проверяют: для этого нужны модели вроде Quint.
Что сделатьЗапишите, что вы хотите проверить: функцию на заданных входах или правило, которое пересекает несколько функций.

Jest или Vitest: сколько мест править при настройке

Нужно поменять правила сборки: сколько мест править?для сайтадля тестов×2общие настройки Vite×1×0настроек почти нетJestправку вносят дваждыVitestправку вносят один разQUnitправить нечего● модель, люди, системы, данные  ● агент и харнесс  ● риск, стоп, граница

Jest нацелен на работу без настройки на большинстве проектов на JavaScript. Он понимает проекты на Babel, TypeScript, React, Angular и Vue. Снимки и подмены встроены, а покрытие кода включается одним флагом --coverage без дополнительной настройки. Тесты он запускает параллельно, каждый в своём процессе, чтобы они не влияли друг на друга, и в начале прогона ставит те, что упали в прошлый раз. Стиль проверок знакомый: test описывает случай, expect сравнивает ответ.

Vitest делает почти то же, но построен на сборщике Vite. Если сайт уже собирается Vite, Vitest берёт те же настройки и плагины, а Jest потребовал бы вторую, отдельную конфигурацию. Авторы Vitest прямо называют это дублированием сложности. Совместимость с Jest у Vitest высокая: он поддерживает большую часть интерфейса Jest и его библиотек, поэтому в большинстве проектов подходит как замена.

Ещё у Vitest быстрый режим наблюдения: при правке файла тесты перезапускаются мгновенно, на той же горячей замене модулей, что и в самом Vite. В документации есть режим тестов в настоящем браузере и веб-интерфейс с результатами. Цена одна: он требует достаточно свежих Vite и Node.js, в документации на сегодня указаны Vite 6.4 и Node 22.12.

Вывод
В этом примереНа проекте с Vite Vitest экономит вторую конфигурацию, а на проекте без Vite разница между ним и Jest невелика.
В общем случаеЕсли Jest уже работает и никому не мешает, переезд ради переезда редко окупается.
Что сделатьПосмотрите, как собирается ваш сайт. Если на Vite, попробуйте Vitest на одном модуле.

QUnit: когда нужны тесты прямо в браузере

QUnitбраузерNode.jsфоновый поток страницы● модель, люди, системы, данные  ● агент и харнесс

QUnit описывает себя как мощный и простой в использовании движок тестов. Для Node.js ему не нужна настройка, а для браузера достаточно минимальной. Запускается он везде, где есть JavaScript: в браузерах, в Node.js, в движке SpiderMonkey и в фоновом потоке страницы. Jest и Vitest, в отличие от него, чаще всего запускают в Node.js.

Стиль у него свой. Связанные тесты собирают в группу командой QUnit.module, отдельный тест описывают через QUnit.test, а ответ сверяют через assert. Для тестов, которые трогают страницу, есть заготовка-«стенд», которая возвращает страницу в исходный вид после каждого теста, и отдельная проверка порядка вызовов для событий и ответов с задержкой. Расширять QUnit можно под себя: свои проверки, свои запуски и свои отчёты. Старые браузеры он тоже поддерживает: версия 2 работает с Internet Explorer 9 и выше.

Вывод
В этом примереQUnit хорош там, где тесты должны идти прямо в браузере и без сборки.
В общем случаеДля современных проектов со сборкой, где нужны подмены, снимки и покрытие из коробки, чаще берут Jest или Vitest.
Что сделатьЕсли тесты должны открываться в браузере как обычная страница, проверьте QUnit первым.

Что у кого: Jest, Vitest и QUnit по пунктам

JestVitestQUnit
Идеяпривычный движок с полным набором: снимки, подмены, покрытиедвижок нового поколения на базе Viteпростой движок, который запускается где угодно
Настройкасвоя конфигурацията же, что у Viteпочти не нужна
Где идётчаще всего в Node.jsчаще всего в Node.jsбраузер, Node.js, другие среды
Как пишут проверкуtest и expecttest и expect, как в JestQUnit.test и assert
Когда подходитJest уже есть и работаетпроект собирается Viteтесты нужны в браузере без сборки

Таблица по строкам. «Идея» говорит, зачем движок появился. «Настройка» показывает, сколько работы до первого теста. «Где идёт» и «Как пишут проверку» важны, если у вас много готовых тестов: стиль Jest и Vitest совпадает, поэтому перенос между ними простой, а на QUnit придётся переписывать проверки.

Что выбрать: Jest, Vitest или QUnit

?JestJest уже естьи всё работаетVitestпроект уже на Viteнастройки общиеQUnitпроверки в браузеребез сборки● модель, люди, системы, данные  ● агент и харнесс

Выбор определяется проектом. Проект собирается Vite: берите Vitest, настройки уже есть. В проекте уже стоит Jest и всё работает: оставьте его. Нужны проверки прямо в браузере без сборки: берите QUnit. Перенос между Jest и Vitest обычно дешёвый, поэтому ошибка выбора не станет необратимой. Если нужно проверять не функции, а правила и порядок событий, смотрите статьи Quint против QUnit и TLA+ и про модели на Quint.

Вывод
В этом примереТри движка закрывают одну задачу, а решает среда: сборщик, браузер или уже готовый набор тестов.
В общем случаеНезависимо от выбора тесты проверяют заданные сценарии, а правила, которые ломаются в особом порядке событий, ловит модель.
Что сделатьВыберите движок по среде проекта и добавьте к нему проверку самих тестов: мутационное тестирование покажет, что тесты вообще замечают порчу.

Частые вопросы

Что выбрать: Jest или Vitest?
На проекте, который собирается Vite, берите Vitest: он использует те же настройки, и вторая конфигурация не нужна. Если Jest уже работает и никому не мешает, переезд редко окупается.
Чем Vitest отличается от Jest?
Vitest построен на Vite, поддерживает большую часть интерфейса Jest и быстро перезапускает тесты при правке файла. Ему нужны достаточно свежие Vite и Node.js.
Когда нужен QUnit?
Когда тесты должны идти прямо в браузере и без сборки. QUnit запускается в браузерах, в Node.js и в других средах с JavaScript, а для Node.js ему не нужна настройка.
Сложно ли перейти с Jest на Vitest?
Обычно нет: проверки в обоих пишут через test и expect, поэтому перенос между ними простой. На QUnit придётся переписывать проверки.
Факты: официальные сайты Jest, Vitest и QUnit на 25 октября 2026. Выбор зависит от вашего проекта, здесь описаны общие признаки.
© 2026 Егор Урванов