Результат выполнения валидационных сценариев в Vest представляет собой структурированный объект, содержащий сведения о состоянии каждого тестового блока, наборе проверок и итоговых сообщениях об ошибках. Такая структура изначально проектируется как пригодная для преобразования в JSON без дополнительных преобразований, что делает её удобной для хранения, передачи по сети и последующего анализа.
После выполнения набора правил формируется объект результата, включающий несколько ключевых уровней:
Каждый уровень сохраняет вложенность, отражающую исходную структуру валидационного сценария. Это важно, поскольку Vest строится вокруг концепции группировки проверок, и результат должен сохранять контекст каждой проверки.
Типичная структура может включать:
Такой формат позволяет не терять связь между бизнес-логикой валидации и её итоговым состоянием.
Сериализация результата в Vest опирается на идею детерминированного преобразования внутреннего состояния в чистый объект JavaScript. Это означает отсутствие классовых экземпляров, методов и прототипных цепочек в итоговом представлении.
Основные принципы:
1. Полная JSON-совместимость
Результат должен без ошибок проходить через
JSON.stringify. Это достигается за счёт использования
только примитивов, массивов и простых объектов.
2. Стабильная структура
Порядок ключей и форма вложенности не должны меняться от запуска к запуску при одинаковом входе. Это критично для:
3. Отсутствие побочных данных
В сериализованном результате отсутствуют ссылки на внутренние механизмы выполнения, такие как сторы состояния или временные кеши.
Так как результат выполнения уже является plain object, базовая сериализация выполняется стандартными средствами Jav * aScript:
const result = suite.get();
const json = JSON.stringify(result);
Внутри result содержится вложенная структура, где:
JSON-формат сохраняет всю эту иерархию без потерь.
Внутренняя структура результата обычно включает следующие элементы:
1. Общий статус
Поле, отражающее итог выполнения:
Это позволяет быстро определить итог без обхода всей структуры.
2. Ошибки
Ошибки представлены в виде массива объектов. Каждый объект ошибки содержит:
Такая структура обеспечивает возможность точечного анализа.
3. Группы тестов
Vest группирует проверки, и это отражается в результате. Каждая группа содержит:
Групповая структура важна при сложной валидации форм или доменных моделей.
4. Кейсы
Каждый кейс представляет собой отдельный сценарий проверки. В сериализованном виде он включает:
Одной из ключевых особенностей является глубокая вложенность результата. При сериализации это создаёт иерархический JSON, который может быть использован для:
При этом важно, что вложенность не является произвольной — она строго повторяет структуру объявления правил.
Перед преобразованием в JSON данные проходят этап нормализации. Он включает:
undefined значенийЭто необходимо для того, чтобы результат оставался компактным и предсказуемым.
Особое внимание уделяется полям ошибок: они приводятся к единому виду, даже если были сгенерированы разными типами валидаторов.
Ошибки являются наиболее важной частью результата, поэтому их структура стандартизируется.
Каждая ошибка после сериализации содержит:
Дополнительно могут присутствовать вычисленные данные, например:
Такой формат позволяет использовать сериализованные ошибки не только для отображения, но и для автоматической обработки.
В более сложных сценариях может применяться пользовательская логика сериализации. Она позволяет:
Например, можно исключить технические детали и оставить только пользовательские сообщения об ошибках:
const result = suite.get();
const simplified = {
status: result.status,
errors: result.errors.map(e => ({
field: e.field,
message: e.message
}))
};
const json = JSON.stringify(simplified);
Такая трансформация часто используется при отправке данных на клиент или в систему логирования.
Важным свойством является детерминированность: одинаковый набор входных данных и правил всегда приводит к одинаковому JSON-результату.
Это достигается за счёт:
Детерминизм позволяет использовать сериализованные результаты в тестовых сравнениях и снапшот-тестировании.
При большом количестве проверок размер результата может существенно увеличиваться. Для оптимизации применяются следующие подходы:
В некоторых реализациях используется режим «compact», где сохраняются только:
Это уменьшает объём JSON без потери диагностической информации.
Сериализованный результат Vest легко интегрируется с внешними инструментами, поскольку представляет собой чистый JSON. Он может использоваться в:
Благодаря стандартизированной структуре отсутствует необходимость в дополнительных адаптерах для базового использования.
Так как сериализация является обратимой на уровне данных, результат можно восстановить в объектную форму без потери информации:
const parsed = JSON.parse(json);
Однако восстановленный объект не содержит методов или логики выполнения — только данные. Это подчёркивает разделение между исполнением правил и представлением результата.
Структура результата спроектирована таким образом, чтобы поддерживать расширение без нарушения обратной совместимости. Новые поля могут добавляться:
При этом базовая структура JSON остаётся неизменной, что обеспечивает стабильность сериализации в долгосрочной перспективе.