Snapshot тестирование — это метод автоматической проверки визуального и структурного состояния компонентов на основе их сериализованного представления. В контексте библиотеки Atomico, которая используется для создания Web Components с реактивным управлением состоянием, snapshot тесты помогают убедиться, что изменения в коде компонента не нарушили его внешний вид или структуру DOM.
Snapshot тестирование основывается на сравнении текущего состояния компонента с заранее сохранённой «снимком» (snapshot). Основные шаги процесса:
Этот метод позволяет выявлять неожиданные изменения в структуре или поведении компонента без ручного просмотра интерфейса.
Atomico интегрируется с современными тестовыми фреймворками, такими как Jest. Основные шаги настройки:
npm install --save-dev jest @testing-library/jest-dom @testing-library/atomico
В package.json или отдельном файле
jest.config.js необходимо включить поддержку snapshot:
module.exports = {
testEnvironment: "jsdom",
setupFilesAfterEnv: ["@testing-library/jest-dom/extend-expect"],
};
Компоненты Atomico экспортируются как функции или классы с
использованием c() для создания веб-компонента. Для
snapshot тестирования важно рендерить их через специальный
рендер-функционал из @testing-library/atomico:
import { render } from "@testing-library/atomico";
import { MyComponent } from "./MyComponent";
test("snapshot MyComponent", () => {
const { container } = render(<my-component prop="value" />);
expect(container).toMatchSnapshot();
});
Здесь container содержит HTML-структуру компонента,
которая автоматически сериализуется Jest и сохраняется как snapshot.
Atomico активно использует реактивное состояние через хуки
useState и useEffect. Snapshot тестирование
позволяет фиксировать состояние компонента на разных этапах жизненного
цикла:
import { render } from "@testing-library/atomico";
import { Counter } from "./Counter";
test("Counter renders initial state", () => {
const { container } = render(<counter initial-count={0} />);
expect(container).toMatchSnapshot();
});
test("Counter updates correctly", async () => {
const { container, getByText } = render(<counter initial-count={0} />);
const button = getByText("+");
button.click();
await new Promise(r => setTimeout(r, 0)); // ожидание обновления состояния
expect(container).toMatchSnapshot();
});
Использование snapshot после изменения состояния позволяет отслеживать любые неожиданные изменения разметки, вызванные реактивными эффектами.
Jest по умолчанию сохраняет snapshot в папке
__snapshots__ рядом с тестовым файлом. Рекомендуется:
"renders with default props",
"updates after click".При внесении осознанных изменений в компонент необходимо обновить snapshot:
npm test -- -u
Это перезаписывает старые snapshot актуальной разметкой. Важно проверять, что изменения действительно ожидаемые, чтобы избежать маскировки ошибок.
Преимущества:
Ограничения:
Snapshot тестирование в Atomico позволяет создавать стабильные, поддерживаемые Web Components, сохраняя контроль над визуальной и структурной целостностью интерфейса при развитии приложения.