Архитектура Vest строится вокруг декларативных тест-кейсов в стиле unit-тестов, где каждая проверка рассматривается как отдельный изолированный блок. При этом жизненный цикл выполнения тестового набора включает этапы подготовки, выполнения и очистки состояния, что позволяет управлять контекстом валидации на разных уровнях абстракции.
При вызове vest() создаётся контейнер тестового набора,
внутри которого регистрируются проверки полей и групповые сценарии.
Исполнение происходит последовательно:
test)Каждый этап может влиять на состояние контекста, доступного внутри тестов, включая внешние зависимости, мок-данные и промежуточные вычисления.
Хуки уровня теста в Vest применяются для управления окружением выполнения валидации. Их основная задача — синхронизация состояния между отдельными проверками, а также контроль побочных эффектов, возникающих при выполнении тестов.
Ключевые сценарии применения:
Хук beforeEach выполняется перед каждым тестом внутри
набора.
Поведение:
testТипичный сценарий применения — подготовка чистого состояния для каждой проверки, чтобы исключить влияние предыдущих тестов.
Пример логической модели выполнения:
Использование beforeEach особенно важно при работе с
изменяемыми структурами данных, такими как формы, объекты состояния и
результаты промежуточных вычислений.
Хук afterEach вызывается после завершения каждого
теста.
Основные задачи:
В отличие от beforeEach, этот хук ориентирован на
постобработку и не влияет на выполнение текущего теста, но может
подготовить окружение для следующего.
Особое значение имеет в сценариях асинхронной валидации, где необходимо гарантировать завершение побочных операций (например, сетевых запросов) до начала следующего теста.
Для сценариев, где требуется единоразовая инициализация или завершение, применяются хуки уровня всего набора.
Выполняется один раз перед началом выполнения всех тестов.
Используется для:
Выполняется один раз после завершения всех тестов.
Используется для:
При комбинировании всех уровней жизненный цикл принимает строгую последовательность:
beforeAllbeforeEachtestafterEachbeforeEach → test → afterEachafterAllТакой порядок обеспечивает детерминированное поведение независимо от количества тестов и их структуры.
Внутри хуков доступен общий контекст набора, который может включать:
Мутации контекста в beforeEach распространяются на
последующие тесты, однако изменения внутри afterEach не
должны влиять на уже выполненные проверки.
Vest поддерживает структурирование тестов через вложенные блоки. В этом случае хуки работают с учётом области видимости:
Такая модель позволяет строить многоуровневые сценарии валидации, где разные группы полей требуют собственного окружения.
Хуки могут содержать асинхронную логику. Это важно при работе с:
Асинхронное выполнение требует строгого завершения перед переходом к следующему этапу жизненного цикла. Нарушение этого порядка приводит к гонкам состояний и некорректным результатам валидации.
Типичная архитектура валидации с Vest предполагает отделение логики проверки от инфраструктурных зависимостей. Хуки используются как слой интеграции:
beforeEach создаются или обновляются зависимостиafterEach происходит их очисткаТакой подход уменьшает связанность тестов с внешними системами и повышает предсказуемость выполнения.
Хуки позволяют реализовывать кэширование промежуточных результатов между тестами одного набора. Это снижает нагрузку при повторяющихся вычислениях, например:
Кэш обычно инициализируется в beforeEach или
beforeAll и инвалидируется в afterEach.
Нарушение изоляции состояния:
beforeEachНекорректная асинхронность:
Дублирование логики:
beforeEachtest вместо
afterEachТакие ошибки приводят к нестабильному поведению набора и усложняют отладку.
Использование хуков уровня теста формирует архитектурный стиль, при котором логика проверки отделяется от управления состоянием. Это позволяет:
Модель жизненного цикла становится основой предсказуемого поведения всей системы валидации.