Знімкові тести (snapshot) зберігають результат при першому запуску у файл, а при наступних - порівнюють з ним.
it('серіалізує замовлення для API', () => {
expect(toApiPayload(order)).toMatchSnapshot();
});
it('форматує адресу', () => {
expect(formatAddress(address)).toMatchInlineSnapshot(`"м. Київ, вул. Хрещатик, 1"`);
});
Оновлення знімків після навмисної зміни: npx vitest -u.
Коли знімки корисні:
- великі структури даних, які складно перевірити вручну: payload для API, згенерована конфігурація, результат парсера;
- виявлення неочікуваних змін у серіалізації: додали поле - знімок це покаже;
- inline-знімки для коротких значень - видно прямо в тесті, рев'ю бачить очікування.
Коли шкодять:
- знімки всієї розмітки компонента змінюються від кожної правки верстки чи класу. Розробник звикає запускати
-uне дивлячись - і знімок перестає щось перевіряти; - великі знімки ніхто не читає на рев'ю: diff на 300 рядків приймається «на віру»;
- нестабільні дані (дати, випадкові id) змушують фіксувати чи маскувати значення, інакше тест падає щоразу;
- знімок замість думки: тест не каже, що важливо в результаті. Явна перевірка
expect(payload.total).toBe(1999)документує намір, знімок - ні.
Візуальна регресія порівнює знімки екрана:
await expect(page).toHaveScreenshot('checkout.png', {
maxDiffPixelRatio: 0.01,
mask: [page.getByTestId('current-date')],
});
Ловить те, що інші тести не бачать: зламаний CSS, зсунуту верстку, зниклі іконки, проблеми темної теми.
Складнощі візуальних тестів:
- рендеринг шрифтів і згладжування відрізняються між ОС і навіть версіями браузера - знімки, зроблені на Mac, не збігаються з Linux у CI. Еталонні знімки генерують у тому самому середовищі (Docker-образ Playwright), де запускаються тести;
- динамічний вміст (дати, реклама, аватари, анімації) - маскувати й вимикати;
- поріг розбіжності - надто суворий дає хибні падіння, надто м'який пропускає реальні зміни;
- зберігання еталонів у репозиторії збільшує його розмір.
Практичний підхід: небагато візуальних тестів для ключових сторінок і компонентів дизайн-системи, явні перевірки поведінки - для логіки, знімки даних - для великих структур з обов'язковим переглядом diff на рев'ю.