Skip to main content

🏁 Заключение: почему scenax — это новый стандарт для API-тестов на Vitest

Восемь итераций. Каждая — шаг к читаемым, структурированным, декларативным тестам, где код становится сценарием, а сценарий — частью продукта.

Изначально мы просто хотели сделать DSL-обёртку над vitest и allure-js, чтобы улучшить читаемость и отчётность API-тестов. Но по пути мы пришли к архитектурному паттерну, которого… не существовало. Мы не нашли ни одного готового решения, которое:

  • давало бы декларативный DSL для API-сценариев на TypeScript,
  • строило бы тест-кейсы как классы с аннотированными шагами,
  • автоматически генерировало бы Allure-отчёты без дублирования,
  • масштабировалось бы по BDD-образцу, но без Gherkin.

Так родился scenax — не просто обёртка, а отдельная архитектура и open-source DSL-фреймворк для построения тестов нового поколения.


🧠 Что мы дали вместо "просто тестов"

БылоСтало
test(name, fn)@TestCase() — декларативное описание
await step('...', () => ...)@Step() — переиспользуемые шаги
feature, label, severity вручную@Feature(), @Severity() и т.д.
Тест = одна функцияТест = структура: сценарий + шаги + контекст
Документация отдельноЧитаемый тест = документация

🔥 Что даёт scenax прямо сейчас

  • 🧩 Читаемые API-тесты, написанные как сценарии
  • 🎯 Точная привязка к Allure TestOps: allureId, severity, feature
  • 📦 Сценарные шаги (@Step, @Scenario, runSteps())
  • 🧠 Шаги с контекстом, передаваемым автоматически (@Context())
  • 🧪 Один DSL — один стиль — вся команда пишет одинаково

🤔 «Зачем классы? Все уходят в функции!»

Да, в UI-фреймворках функции вытеснили классы — там нужна реактивность, локальность и гибкость. Но в сценарном тестировании:

  • Класс = сценарий (UseCase)
  • Метод = шаг
  • Декоратор = декларативное описание поведения
  • Контекст и расширения интегрируются естественно

📌 Мы вдохновились Serenity, NestJS и Playwright, но собрали их лучшее — в class-based DSL на TypeScript. Архитектурно, гибко, читаемо.


📈 Сравнение с Vitest + Allure

ПараметрVitest + Allurescenax
Параметризацияtest.each@TestCase.each() + метаинфо
Структура шагов⚠️ вручную через step()@Step() + runSteps()
Архитектура⚠️ flat-функции✅ сценарии как классы
Контекст❌ руками✅ через @Context()
Стильпроизвольныйединый DSL-стиль
Отчётностьзависит от дисциплинывстроена и стандартизирована

🧱 Что за паттерн мы реализовали?

scenax реализует архитектуру, которую мы называем Scenario-oriented DSL.

Вдохновлено:

  • 🧠 Serenity BDD (Java): идея шагов и сценариев
  • ⚙️ NestJS: классы, декораторы, DI
  • 🧪 Playwright: изоляция, fixtures, контекст

Но объединено и упрощено для TypeScript-разработки:

  • Сценарий = декларативный класс с мета-информацией
  • Поведение = управляется методами + контекстом
  • Шаги = аннотированные методы, которые легко вызывать
  • Расширение = через слои, DI и классы без магии

📌 Мы не нашли ни одного аналога, который делал бы всё это в одном DSL.


🤝 Кто должен использовать это прямо сейчас

  • Команды, которым нужен читаемый Allure-отчёт, а не набор console.log
  • Команды, где есть TestOps или QA, которым нужен живой сценарий
  • Архитекторы, которые устали от copy-paste шагов в тестах
  • Разработчики, которым важно писать чисто, предсказуемо и гибко

🤖 Есть ли аналоги?

РешениеЯзыкОтличия
Serenity BDDJavaСложный вход, громоздкая структура
Playwright testTSФокус на UI, нет сценариев-классов
vitest + allureTSНет DSL, мета-инфо и автоматизации сценариев
scenaxTSПростой DSL, шаги + сценарии, class-based архитектура

🚀 Потенциал развития

scenax — это не «утилита». Это библиотека тестовой архитектуры.

В будущем мы планируем:

  • 🧱 StepLibrary() — lego-блоки шагов для переиспользования в сценариях
  • 🧬 @Inject() для nested-инъекций и dependency tree
  • 🧠 Интеграция с UI/Playwright тестами на том же DSL
  • 📊 Авто-трекинг статистики шагов, сценариев и покрытия через Allure
  • 🛠️ CLI и VS Code плагины для генерации шаблонов шагов
  • 🧭 Архитектурные пресеты для монореп, микросервисов и CI-интеграций

💬 Заключительная мысль

scenax — это когда API-тест превращается в намерение,
когда сценарий читается как документация,
и когда команда начинает говорить на одном языке.

Если вы устали от «тестов ради тестов»,
если вам нужен внятный отчёт, живой DSL и архитектура, которая масштабируется

Добро пожаловать в scenax.

🚀 Попробуй. Подключи. Покажи команде — и вы уже не вернётесь назад.


📦 GitHub: https://github.com/dmitry-nkt/scenax
🧪 Документация: в каждом тесте
👉 Установи: npm i -D scenax