Snapshot тестирование представляет собой метод контроля изменений интерфейса или структуры данных, основанный на сравнении текущего состояния с ранее сохранённым эталонным снимком (snapshot). Этот подход позволяет автоматически выявлять неожиданные изменения в компоненте, элементе DOM или API-ответе, обеспечивая стабильность приложения и упрощая регрессионное тестирование.
В контексте Cypress snapshot тестирование используется как для визуальных проверок, так и для проверки структуры данных. Основной принцип — сохранить эталонное состояние объекта или страницы и сравнивать его с текущим состоянием при каждом запуске тестов.
Cypress из коробки не поддерживает snapshot тестирование, поэтому
чаще всего используются сторонние плагины, такие как
cypress-plugin-snapshots или интеграция с
jest-snapshot.
Пример установки плагина:
npm install --save-dev cypress-plugin-snapshots
В файле cypress/support/index.js подключается
плагин:
import 'cypress-plugin-snapshots/commands';
После этого доступны команды для создания и проверки снимков, такие
как toMatchSnapshot и
toMatchImageSnapshot.
Snapshot тестирование DOM используется для проверки структуры и атрибутов элементов на странице. Это особенно полезно для компонентов React, Vue или Angular.
Пример использования:
describe('DOM snapshot тестирование', () => {
it('Проверка структуры кнопки', () => {
cy.visit('/login');
cy.get('button#submit')
.toMatchSnapshot(); // сохраняет или сравнивает snapshot кнопки
});
});
Особенности:
capture: 'fullPage' для
сохранения всего DOM страницы.Визуальное тестирование проверяет внешний вид компонентов, страниц
или элементов. Для Cypress используют плагин
cypress-image-snapshot.
Установка:
npm install --save-dev cypress-image-snapshot
Подключение:
import { addMatchImageSnapshotCommand } from 'cypress-image-snapshot/command';
addMatchImageSnapshotCommand();
Пример теста:
describe('Визуальный snapshot', () => {
it('Проверка кнопки', () => {
cy.visit('/login');
cy.get('button#submit')
.matchImageSnapshot('submit-button');
});
});
Особенности:
PNG) в директории
cypress/snapshots.failureThreshold и failureThresholdType для
учета незначительных изменений, например, из-за рендеринга шрифтов.Сравнение API-ответов с эталонным snapshot помогает выявлять непреднамеренные изменения в данных.
Пример:
describe('API snapshot', () => {
it('Проверка ответа /users', () => {
cy.request('/api/users')
.its('body')
.toMatchSnapshot();
});
});
Особенности:
id,
createdAt) с помощью функций snapshotDiff или
предобработки данных перед сравнением.--updateSnapshot.Snapshot тесты особенно эффективны в автоматизированных конвейерах. Важно:
Пример команды запуска с обновлением snapshot:
cypress run --env updateSnapshots=true
Это автоматически перезаписывает старые эталоны при подтвержденных изменениях.
Snapshot тестирование в Cypress обеспечивает надежный механизм обнаружения изменений как на уровне интерфейса, так и на уровне данных. Правильная интеграция и организация тестов позволяет минимизировать регрессии, ускорить разработку и повысить уверенность в стабильности приложения.