HTML Academy · Урок

Тестирование снимков HTML

Выявляйте непреднамеренные изменения HTML с помощью тестов снимков

Урок 4 из 414 шагов

«Тестирование снимков HTML» — бесплатный урок HTML Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения HTML Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс HTML Academy содержит 4 уроков всего.

Что такое тестирование снимков

Тестирование снимков записывает отрендеренный результат компонента или страницы при первом запуске, а при последующих запусках сравнивает новый результат с сохранённым снимком. Любое изменение HTML приводит к сбою теста, пока снимок намеренно не обновят.

Тестирование снимков в Jest

Сопоставитель Jest toMatchSnapshot() сериализует значение (в том числе JSX, отрендеренный в HTML) и сравнивает его с сохранённым файлом. npx jest -u обновляет снимки при намеренных изменениях. Тесты служат защитой от случайных изменений при отображении.

import { render } from "@testing-library/react";
import Button from "./Button";

test("Button renders consistently", () => {
  const { container } = render(<Button>Save</Button>);
  expect(container.innerHTML).toMatchSnapshot();
});

Средство запуска тестов Storybook

Средство запуска тестов Storybook выполняет каждую историю и сохраняет её результат с помощью axe (доступность) и сериализации DOM. В сочетании с Chromatic оно дополнительно выполняет визуальную проверку регрессий: сравнивает изображения на уровне пикселей в дополнение к сравнению DOM.

Визуальная проверка регрессий с Percy или Chromatic

Percy и Chromatic сохраняют отрендеренные страницы как изображения и показывают визуальные различия. Они выявляют регрессии CSS, которые пропускают снимки DOM (замену шрифта, изменение отступа, сдвиг цвета). Сочетайте снимки DOM (дешёвые и быстрые) с визуальными снимками (дорогими, но комплексными).

Обслуживание снимков

Снимки, которые меняются «слишком легко», превращаются в информационный шум. Не включайте в снимки нестабильные значения (даты, идентификаторы, случайные ключи). Используйте сопоставители свойств Jest (expect.any(String)) для полей, которые закономерно меняются между запусками. Снимки должны быть небольшими и сосредоточенными на конкретной проверке.

Проверка снимков при просмотре кода

Различия в файлах снимков в запросах на включение изменений — полноценный материал для проверки. Проверяющие убеждаются, что изменения DOM намеренны и полезны, а также выявляют случайные каскадные эффекты от «простого» изменения CSS. Относитесь к различиям снимков так же, как к любым другим различиям.

Не создавайте снимки всего подряд

Снимки огромного результата рендеринга страницы целиком хрупки — любое небольшое изменение приводит к гигантскому различию. Создавайте снимки на уровне компонентов: каждой кнопки, каждой карточки, каждого FormField. Для рендеринга страницы целиком лучше использовать тесты визуальной регрессии.

Сериализация снимков

Выберите способ сериализации: полный HTML, упрощённый DOM, только свойства или дерево доступности. Каждый формат выявляет разные виды регрессий. Для компонентов интерфейса самый тщательный вариант — полный HTML; для логики, управляемой свойствами, формат «только свойства» дешевле и редко даёт ложные срабатывания.

Когда снимки ломаются

Самая распространённая причина — рефакторинг, который создаёт эквивалентный, но иначе структурированный HTML. Изучите различие: если изменение намеренное и улучшает код, обновите снимок. Если оно неожиданное, исправьте исходный код. Никогда не запускайте jest -u без предварительной проверки.

Межбраузерные снимки

Инструменты визуальной регрессии выполняют рендеринг в нескольких браузерах и сообщают о различиях, характерных для конкретного браузера. Используйте это, чтобы обнаруживать CSS, который отображается по-разному в Safari и Chrome — такое часто случается с новыми возможностями раскладки на раннем этапе их внедрения. Без межбраузерных снимков такие регрессии обнаруживаются только при ручной проверке QA.

Сочетание с другими тестами

Тесты снимков необходимы, но недостаточны. Они выявляют непреднамеренные изменения рендеринга, но не логические ошибки — например, когда нажатие кнопки выполняет не то действие. Сочетайте их с модульными тестами поведения и сквозными тестами пользовательских сценариев: каждый уровень выявляет свои виды сбоев.

Производительность

Тесты снимков выполняются быстро — они сравнивают строки и файлы. Тесты визуальной регрессии медленнее: они отображают пиксели, сравнивают изображения и часто работают в нескольких браузерах. Запускайте снимки при каждой сборке непрерывной интеграции; визуальную регрессию запускайте для каждого PR, но, возможно, не для каждого коммита — в зависимости от доступного бюджета непрерывной интеграции.

Проверка знаний

Почему тесты снимков DOM обычно дополняют тестами визуальной регрессии, такими как Percy или Chromatic?

Итоги

Тестирование снимками сохраняет полученный HTML при первом запуске и сообщает о любых изменениях при последующих запусках. Используйте Jest toMatchSnapshot для DOM компонентов, Storybook Test Runner для сценариев, а Percy или Chromatic — для визуальной регрессии на уровне отдельных пикселей. Создавайте снимки на уровне компонентов, а не страниц, исключайте нестабильные значения и внимательно проверяйте различия в PR. Для полного покрытия сочетайте их с модульными и сквозными тестами.

Можно начать бесплатно

Изучай HTML с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
40
Уроки
159

Часто задаваемые вопросы

Урок «Тестирование снимков HTML» бесплатный?

Да — полный текст урока «Тестирование снимков HTML» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс HTML Academy, подпишись на CoddyKit PRO. Курс HTML Academy содержит 4 уроков всего.

Чему я научусь в уроке «Тестирование снимков HTML»?

Выявляйте непреднамеренные изменения HTML с помощью тестов снимков Ты практикуешь HTML Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать HTML Academy?

Предыдущий опыт не требуется. HTML Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Тестирование снимков HTML»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке HTML Academy?

Да. Каждый урок HTML Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Валидатор разметки W3C
  2. Проверка HTML в Lighthouse
  3. Pa11y и axe для тестирования доступности
  4. Тестирование снимков HTML
← Назад к HTML Academy