Снапшоты вычисленных стилей в test-runner - #129
Conversation
|
Добавил два варианта съёмки поверх исходного — коммит Что изменилосьКаждая story снимается трижды в рамках одного визита:
Тёмная тема меняет только цвета, мобильный вьюпорт — единицы свойств; три полные копии заняли бы ~6.5 МБ вместо 2.47 МБ. Дифф при этом остаётся читаемым: Если вариант меняет не стили, а разметку, снапшот не пишется — тест падает с явным сообщением «набор элементов не совпадает с light». Ожидание раскладкиПрежнее ожидание ( Опт-аут для storyПоявился export const Thumbnails: Story = {
parameters: { styleSnapshot: { skip: true } }
};Пока он нужен ровно одной story — ПроверкаДва прогона подряд после генерации baseline: Падает по-прежнему только Password (#128). Прогон подорожал с 25–31 с до 34–37 с — три варианта вместо одного. |
269a68e to
d27a905
Compare
|
Переписал коммит: конфиг тест-раннера больше не протекает в stories. Опт-ины переехали в Во всём стеке теперь ноль изменённых stories — только Проверка после переписывания: полный прогон |
Пиксельные снимки для теней, пунктира и форм
Проверка доступности через axe в test-runner
Что
Хук
postVisitв.storybook/test-runner.tsснимает у каждой story вычисленные стили и сверяет с baseline в.storybook/style-baselines/<storyId>.json.Слепок берётся с элементов, размеченных PrimeNG (
data-pc-section) — это стабильная семантическая карта компонента, покрывающая и внутренние части (inputtext/root,pcfilter/root,button/label). Отслеживается 21 свойство: паддинги,height/min-height, типографика, радиусы, толщины границ,gap,color/background-color/border-top-color.Пиксельных скриншотов нет намеренно: дифф читается как
pcfilter/root · height: 40px → 44px, а не «13 пикселей отличаются», и baseline не привязан к шрифтам, сглаживанию и ОС — переносится между macOS и CI без docker.Как пользоваться
Baseline в репозиторий не кладётся — как пиксельные снимки (#131) и долг axe (#130): каталог под игнором, первый прогон на чистой копии снимает слепок сам, дальше сверяется с ним. В
Files changedчетыре файла:.gitignore,.storybook/test-runner.ts,package.json,package-lock.json.Стабилизация
Первый прогон ловил ложные срабатывания на гонках загрузки:
galleria/thumbnails:height: 0px → 97.59px— картинки превью;listbox/filter:height: 40px → 44px— иконочный веб-шрифт.Поэтому перед съёмкой хук ждёт
document.fonts.ready, догрузку всех<img>и два кадраrequestAnimationFrame.Проверка
Baseline сгенерирован (262 story), затем два прогона подряд без расхождений:
Единственное падение —
password.stories.ts, тот самый баг шаблона; исправляется в #128. После его вмержа baseline для Password добавится обычным прогоном.Прогон подорожал с 26 с до 40 с.
Что это ловит
Снимок сверяется с тем, что лежит локально с прошлого прогона: правку токенов видно сразу и построчно. Слепка в git нет, поэтому в чистом окружении первый прогон только фиксирует состояние — регрессию он поймает со второго.
Проверка после выноса baseline: прогон
components/tagна чистой копии —4 passed,4 written, содержимое совпало с прежними файлами из репозитория; повторный —4 passed; подменилpadding-topв снимке —1 failedс[light] tag/root · padding-top: 99px → 4px.