AIKraft/Skills/Паттерны тестирования ui в compose

Паттерны тестирования ui в compose

Use when writing or reviewing Jetpack Compose UI tests, screenshot tests, previews, semantics assertions, fake image loading, keyboard input, focus assertions, interaction state (hover/pressed/focused), or tests for plain state-driven UI composables.

chrisbanes official Дизайн

Что делает навык

Набор паттернов для написания UI-тестов в Jetpack Compose, позволяющий проверять поведение интерфейса через минимальные контракты состояния, семантику и визуальные снимки. Решает задачу изоляции тестов от сложной инфраструктуры (DI, навигация, асинхронность) для повышения их надежности и скорости.

Когда применять

  • Проверка отображения текста, кнопок, ветвлений загрузки/ошибок и условного контента.
  • Тестирование взаимодействия с клавиатурой, навигации фокуса и состояний наведения/нажатия.
  • Визуальное тестирование макета, цветов, типографики, теней и композиции изображений через скриншоты.
  • Проверка корректности обновления UI при изменении состояния держателя состояния (state holder).
  • Имитация загрузки изображений для изоляции тестов от внешних сервисов или проверки запросов моделей.

Как работает

  1. Определите поведение и конкретный аспект, который необходимо проверить, выбрав минимальный достаточный «шов» (seam) из таблицы паттернов.
  2. Используйте plain UI Compose тесты с controlled state и колбэками, избегая построения графов зависимостей или ViewModels, если они не являются объектом теста.
  3. Применяйте утверждения семантики (onNodeWithText, assertIsEnabled, assertDoesNotExist) и тестовые теги для узлов без стабильного текста.
  4. Для проверки взаимодействия используйте MutableInteractionSource вместо имитации указателя, а для клавиатуры — ввод ключей с проверкой семантики фокуса.
  5. При скриншот-тестах обеспечьте детерминированность состояния, заменив сетевые изображения фейковыми загрузчиками и заморозив анимации.
  6. Синхронизируйте Compose через waitForIdle или runOnIdle перед утверждениями, избегая Thread.sleep, и завершайте тест без изменений, если он уже корректен.

Примеры запросов агенту

Напиши UI-тест для Composable, который проверяет, что кнопка 'Save' становится неактивной после нажатия, используя утверждения семантики.
Создай тест с фейковым загрузчиком изображений, чтобы проверить, что при ошибке сети отображается ветвление ошибки, а не скелетон загрузки.
Реализуй проверку навигации фокуса в TV-интерфейсе с использованием ввода клавиш и утверждений о семантике фокуса, а не визуальных свойствах.

Что понадобится

  • Среда выполнения Jetpack Compose и тестовый фреймворк (composeTestRule)
  • Инструменты для создания скриншотов (Screenshot tests)
  • Библиотека для загрузки изображений (для настройки фейковых загрузчиков)

Описание составлено по SKILL.md навыка, сверено 05.10.2026.

Как подключить

1Скачать навык
# возьмите папку навыка «compose-ui-testing-patterns» из репозитория: # https://github.com/chrisbanes/skills
2Положить папку с SKILL.md к навыкам ассистента
# положите папку навыка туда, где ассистент ищет skills: cp -r compose-ui-testing-patterns/ ~/.claude/skills/compose-ui-testing-patterns/

Навык — папка с файлом SKILL.md (описание + инструкции) и опциональными скриптами. Ассистент (Claude, Claude Code и совместимые) подхватывает его по описанию и следует шагам.