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

На диаграмме представлены все основные слои на которых располагаются лишь некоторые из существующих модулей. Полный перечень приведён в соответствующем разделе.
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.
Адаптеры внешней среды
Реализуют механизм подмены методов чтения и записи данных внешнего окружения различными методами:
native— это условное обозначение компонента. Описывает один из способов самостоятельной подмены зависимостей.@storyshots/msw-externals- реализует не инвазивный метод подмены с помощью библиотекиmsw.