Модульное тестирование CSS с Jest
Тестируйте результаты CSS-in-JS и создавайте снимки стилизованных компонентов с помощью Jest и связанных средств сопоставления.
«Модульное тестирование CSS с Jest» — бесплатный урок CSS Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения CSS Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс CSS Academy содержит 4 уроков всего.
Зачем тестировать CSS с помощью Jest
Модульное тестирование CSS программно проверяет вычисленные стили, применение классов и поведение вёрстки. Оно выявляет регрессии логики CSS (применён неправильный класс, отсутствует модификатор), не требуя снимка браузера или ручной визуальной проверки.
JSDOM и поддержка CSS
Jest по умолчанию использует JSDOM, который лишь ограниченно поддерживает CSS: он не вычисляет компоновку и не обрабатывает сложные селекторы. Для базовой проверки наличия классов и встроенных стилей JSDOM достаточно; для проверки вычисленных свойств используйте jest-environment-jsdom с макетами модулей CSS.
Тестирование применения классов
Отобразите компонент и проверьте, что к нему применены правильные классы CSS в зависимости от свойств или состояния. Так вы убедитесь, что условная логика классов (активный, отключённый вариант с ошибкой) работает правильно, не проверяя конкретные значения стилей.
<button class="btn-primary">Primary Button</button>
Модули CSS в тестах
Jest преобразует импорты модулей CSS с помощью identity-obj-proxy. Этот прокси возвращает строку имени класса для любого запрошенного свойства: styles.primary возвращает "primary". Тесты проверяют имена классов, не требуя применения настоящего CSS.
jest-styled-components
Для проектов со Styled Components пакет jest-styled-components добавляет сопоставитель toHaveStyleRule. Проверяйте, что стилизованный компонент применяет правильные значения свойств CSS в зависимости от свойств компонента, не требуя настоящего браузера для вычисления стилей.
<button class="btn">Enabled</button>
<button class="btn" disabled>Disabled (0.5 opacity)</button>
@testing-library/jest-dom
jest-dom расширяет Jest сопоставителями, предназначенными для DOM: toHaveStyle (проверяет встроенный или вычисленный стиль), toHaveClass (проверяет список классов), toBeVisible (проверяет display, visibility и opacity). Благодаря им утверждения о CSS становятся понятными и выразительными.
Тестирование имён классов по снимкам
Снимки компонентов сохраняют отображённую разметку, включая имена классов. Переименование модулей CSS или изменение логики условных классов отображается в различиях снимков. Это удобно для быстрого выявления непреднамеренных изменений классов, но требует внимательной и дисциплинированной проверки снимков.
Ограничения тестирования CSS в Jest
Jest не может вычислять компоновку (offsetWidth, getBoundingClientRect), обрабатывать медиазапросы или запускать CSS-анимации. Для этого требуется настоящее браузерное окружение через Playwright или Cypress. Тесты CSS в Jest дополняют браузерное тестирование, а не заменяют его.
Тестирование пользовательских свойств CSS
Устанавливайте пользовательские свойства CSS на элементе-контейнере в тестах: element.style.setProperty("--color-primary", "red"). Считывайте вычисленные значения с помощью getComputedStyle(el).getPropertyValue("--color-primary"). JSDOM поддерживает чтение пользовательских свойств, но не поддерживает каскад.
Тестирование классов анимации
Проверяйте, что классы запуска анимации добавляются и удаляются в нужные моменты: например, что модальный компонент добавляет класс animate-enter при открытии и класс animate-exit перед размонтированием. Сам CSS анимации проверяется с помощью VRT.
Покрытие логики CSS
Логика CSS находится в JavaScript: это условные строки классов, значения поставщика темы и создание объектов стилей. Покрытие JavaScript-кода в Jest (Istanbul) охватывает эту логику CSS. Пишите тесты для всех ветвей, чтобы проверить каждый вариант и сочетание состояний.
Проверка знаний
Что делает identity-obj-proxy при использовании с модулями CSS в Jest?
Резюме
Модульное тестирование CSS с помощью Jest проверяет логику применения классов, условные стили и поведение модулей CSS без настоящего браузера. Используйте identity-obj-proxy для модулей CSS, jest-styled-components для Styled Components и сопоставители jest-dom для понятных утверждений. Объединяйте их с VRT для комплексного контроля качества CSS.
Часто задаваемые вопросы
Урок «Модульное тестирование CSS с Jest» бесплатный?
Да — полный текст урока «Модульное тестирование CSS с Jest» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс CSS Academy, подпишись на CoddyKit PRO. Курс CSS Academy содержит 4 уроков всего.
Чему я научусь в уроке «Модульное тестирование CSS с Jest»?
Тестируйте результаты CSS-in-JS и создавайте снимки стилизованных компонентов с помощью Jest и связанных средств сопоставления. Ты практикуешь CSS Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать CSS Academy?
Предыдущий опыт не требуется. CSS Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Модульное тестирование CSS с Jest»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке CSS Academy?
Да. Каждый урок CSS Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы визуального регрессионного тестирования
- Percy и Chromatic для Storybook
- Модульное тестирование CSS с Jest
- Тестирование доступности: color-contrast и focus