Email or username:

Password:

Forgot your password?
Андрей Ситник

Всё не могу найти нормальный инструмент для юнит-тестов в Node.js.

Есть переусложнённые системы:
— У Jest свой resolver из-за этого его так и не могут починить с ESM и всё ломается.
— Есть Vitest, но он пакует всё через Vite и для Node.js-библиотек это бессмысленно.

Есть очень минимальные инструменты:
— Есть тесты встроенные в Node.js — но там некрасивый вывод.
— Есть минималистичный uvu, но там нет изоляции тестов и параллельного запуска (и он иногда пропускает тесты).
github.com/lukeed/uvu

2 comments
Андрей Ситник

Решил в итоге прокачать uvu. Самое круто, что с uvu файл теста — это уже исполняемый скрипт.

1. Я каждый тест запускаю, как отдельную программу для изоляции
2. Использую xargs -P $(nproc), чтобы запустить программы параллельно

github.com/hplush/slowreader/b

3. tsm позволяет писать тесты на TS и отлично работает с TSM.
4. c8 отдельной командой добавляет coverage.

github.com/hplush/slowreader/b

Решил в итоге прокачать uvu. Самое круто, что с uvu файл теста — это уже исполняемый скрипт.

1. Я каждый тест запускаю, как отдельную программу для изоляции
2. Использую xargs -P $(nproc), чтобы запустить программы параллельно

github.com/hplush/slowreader/b

3. tsm позволяет писать тесты на TS и отлично работает с TSM.
4. c8 отдельной командой добавляет coverage.

Андрей Ситник

5. В xargs output нужен, чтобы печатать вывод теста только после того, как он закончился
6. И я изучаю вывод теста на случай редких ошибок, когда uvu не заметила тест который сделал throw undefined и подобное

Плюс с помощью pnpm run я вообще все скрипты запускаю параллельно (проверку типов, линтеры, проверку TS в шаблонах Svelte).

В итоге тесты всё по максимум использует ядра ЦПУ.

И на все юнит-тесты нужно лишь десяток зависимостей — 37 МБ (!) node_modules.

github.com/hplush/slowreader/b

5. В xargs output нужен, чтобы печатать вывод теста только после того, как он закончился
6. И я изучаю вывод теста на случай редких ошибок, когда uvu не заметила тест который сделал throw undefined и подобное

Плюс с помощью pnpm run я вообще все скрипты запускаю параллельно (проверку типов, линтеры, проверку TS в шаблонах Svelte).

Go Up