Перейти к основному содержимому

Архитектура

storyshots является реализацией спецификации. Библиотека дополняет модель следующим:

  • Браузер как честь детерминированной системы - тесты выполняются в браузере, в целевом окружении веб-приложений.
  • Test-assisted программирование - тесты используются как окружение разработки в продвинутом UI-режиме.
  • Закрытая архитектура - storyshots закрыт от деталей реализации приложений, что упрощает интеграцию решения.
  • Расширяемость - ядро storyshots легко расширяется дополнительными инструментами и адаптерами приложений.

Рассмотрим архитектуру основных пакетов подробнее:

diagram

примечание

На диаграмме представлены все основные слои на которых располагаются лишь некоторые из существующих модулей. Полный перечень приведён в соответствующем разделе.

AUT

AUT — это тестируемая часть приложения. Чем она больше, тем больше покрытие тестов и тем лучше они защищают от регресса.

IExternals

Интерфейс взаимодействия с внешней средой, методы чтения и записи данных.

примечание

Чаще всего, на проектах данный интерфейс существует в неявном виде, то есть не объявлен в принципе.

Менеджер историй

Основной слой storyshots, состоит из единственного пакета @storyshots/core. В его ответственности входит:

  • Базовые примитивы — описывает основные сущности проекта: истории, трансформации, конфигурации.
  • UI режим — реализует UI режим управления историями
  • CI режим — реализует фоновый режим запуска историй
  • Тестирование — реализует всё что касается тестов: работа со слепками, обновления эталонов, обработки ошибок, определение пройденных сценариев.
примечание

Является полностью независимым от используемого на проекте стека за счёт интерфейсов IPreviewClient и IPreviewServer.

IPreviewClient

Клиентская часть AUT, интегрирует менеджер историй с тестируемым приложением.

Ответственности:

  • Описание основных тестовых сценариев.
  • Отображение выбранной истории по заданным параметрам на экране.
  • Интеграция состояния AUT и жизненного цикла теста: установка состояния и полный сброс.
примечание

Все перечисленные ответственности IPreviewClient выполняет с учётом реального стека тестируемого проекта:

  • Упрощается интеграция storyshots.
  • Повышается защита от регресса.
  • Упрощается повторное использование компонентов системы.

IPreviewServer

Основная обязанность IPreviewServer - закрывать потребности IPreviewClient как FE-компонента системы. В основном это обычная передача статики веб-приложения, однако, этим возможности могут не ограничиваться.

at

Хост веб-приложения, обычно это корневой адрес dev-сервера:

const server = {
// По данному адресу развёрнут dev-сервер отдающий IPreviewClient
at: 'http://localhost:3000',
/* ... */
}

cleanup

Функция, вызывающаяся при закрытии сервера. Используется для освобождения занятых ресурсов.

const server = app.listen();

const config = {
// Закрыть сервер при выходе из режима storyshots
cleanup: () => server.close()
/* ... */
}

Клиенты AUT

Слой содержащий компоненты, адаптирующие AUT под интерфейс IPreviewClient.

подсказка

Пакет @storyshots/react адаптирует react приложения для менеджера storyshots.

примечание

Для использования storyshots в, например, vue приложении, всё что нужно сделать так это реализовать интерфейс IPreviewClient.

Серверы AUT

Слой содержит адаптеры сборщиков и серверов AUT на интерфейс IPreviewServer.

подсказка

@storyshots/exec-preview — сервер preview использующий оригинальные скрипты сборки AUT.

примечание

@storyshots/next является примером модуля который одновременно реализует как IPreviewClient, так и IPreviewServer.

Адаптеры внешней среды

Реализуют механизм подмены методов чтения и записи данных внешнего окружения различными методами: