React Native Testing Library — скилл
Скилл для тестов React Native Testing Library: запросы, userEvent, асинхронность и различия между версиями 13 и 14
- 3 430 ★ репозитория
- Последний коммит
- MIT
Минимальный доступ
Почему такой уровень
- Скилл дает инструкции и правит только тестовые файлы проекта
- Агент запускает Jest и устанавливает dev-зависимости из npm
Установка
- Работает в
В терминале, через SkillFoxx CLI
npx skillfoxx add skills/react-native-testing-libraryОпределит агенты на машине, покажет уровень доступа и зафиксирует версию.
Другие способы установки
Доступ и проверки
Как мы проверяемМинимальный доступИнструмент ничего не запускает и не ходит в сеть.
- Скилл дает инструкции и правит только тестовые файлы проекта
- Агент запускает Jest и устанавливает dev-зависимости из npm
Это чужой код. Посмотрите файлы в репозитории перед установкой.
Что делает
Скилл `react-native-testing` лежит в репозитории React Native Testing Library и учит агента писать тесты компонентов с помощью `@testing-library/react-native`. Первым делом агент смотрит версию библиотеки в `package.json` и подгружает нужный справочник: для версии 14 с React 19 и асинхронным `render` или для версии 13 с React 18 и синхронным. Дальше скилл задает порядок запросов, от `getByRole` до `getByTestId` как последнего средства, и различает варианты `getBy`, `queryBy` и `findBy`. Он советует `userEvent` вместо `fireEvent`, перечисляет матчеры вроде `toBeOnTheScreen` и `toBeVisible` и дает одиннадцать правил: использовать `screen`, не ставить побочные эффекты в `waitFor`, не оборачивать вызовы в `act()` и не вызывать `cleanup()`. Отдельный файл собирает антипаттерны.
Для кого. Разработчикам мобильных приложений на React Native, которые пишут и чинят тесты компонентов вместе с Claude Code, Cursor или Codex.
Подходит, если
- Для экрана с формой пишутся тесты, и агент использует `getByRole` и `userEvent.type`
- Тест мигает из-за `waitFor` с побочными действиями, и его надо переписать на `findBy`
- Проект переходит с версии 13 на 14, где `render` стал асинхронным
- Нужны проверки доступности: `toBeEnabled`, `toBeChecked`, `toHaveAccessibleName`
- Компонент завернут в провайдеры темы и авторизации, и агент строит свою функцию `render`
Не подходит, если
- Нужны сквозные тесты на устройстве или эмуляторе: библиотека имитирует среду React Native и в приложение не заходит
- Тестируется веб-версия на React: для нее есть React Testing Library
- Требуется скилл по снимкам и визуальным сравнениям: он такого не разбирает
Пример запроса к агенту
Напиши тесты для экрана входа на React Native Testing Library: пустые поля, ошибка пароля и успешный входОграничения
Скилл охватывает версии 13 и 14 библиотеки и предупреждает, что знания модели об API могут быть устаревшими, поэтому справочные файлы важнее памяти. Проверялась работа с Jest, с другими раннерами тесты должны работать, но подтверждения нет. Библиотека зависит от `test-renderer`, который ставится отдельной зависимостью для разработки. В README репозитория скилла нет, и `npx skills add callstack/react-native-testing-library --skill react-native-testing` — общий способ skills CLI, не документированный проектом.
Как отключить. Удалите папку `react-native-testing` из каталога скиллов проекта. Библиотека `@testing-library/react-native` в зависимостях остается.
Частые вопросы
Как поставить скилл RNTL?
Скопируйте папку `skills/react-native-testing` в каталог скиллов агента или выполните `npx skills add callstack/react-native-testing-library --skill react-native-testing`. Команду проект не документирует, это общий путь skills CLI.
Чем различаются версии 13 и 14?
Версия 13 работает с React 18 и `react-test-renderer`, а `render` синхронный. Версия 14 рассчитана на React 19 с `test-renderer`, и `render` там асинхронный. Скилл выбирает справочник по версии из `package.json`.
Какой запрос выбирать первым?
Сначала `getByRole` с параметром `name`, затем `getByLabelText`, `getByPlaceholderText`, `getByText`, `getByDisplayValue` и в последнюю очередь `getByTestId`. Для `getByRole` элемент должен быть доступным: `View` требует `accessible={true}`.
Когда нужен `queryBy`?
Только для проверки отсутствия элемента через `.not.toBeOnTheScreen()`. Для ожидания появления берут `findBy`, а не связку `waitFor` и `getBy`.
Нужно ли оборачивать вызовы в `act()`?
Нет, `render`, `fireEvent` и `userEvent` делают это сами. Не нужен и `cleanup()`: очистка идет автоматически после каждого теста.
Обсуждение
Вопросов и отзывов пока нет.
Похожие
СкиллыСкилл Пола Хадсона по Swift Testing: параметризованные тесты, подтверждения, тесты на завершение процесса и переход с XCTest
57 справочных файлов по тестам Playwright на TypeScript: агент берет из них нужный по задаче, от локаторов до шардирования в CI
Скилл noqa-testing учит агента тестировать iOS и Android: читать экран, нажимать, писать кейсы и гонять их на реальном телефоне
Swift Testing Agent Skill
swift-testing-agent-skill
Скилл по Swift Testing от Антуана ван дер Ли: новые API, миграция с XCTest, параметризованные тесты и плоские тесты. Для Claude Code и других агентов
Руководства для агента, который пишет и чинит тесты Playwright: выбор локаторов, ожидания и диагностика сбоев в CI
Скилл ведет Claude Code и Codex через пишущий и чинящий цикл автотестов API на pytest с проверкой реальным запуском.
Сравнение с похожими
Карточки с тем же главным запросом: чем они отличаются.
| Инструмент | Официальный | Звезды репозитория | Главное отличие |
|---|---|---|---|
| React Native Testing Library (эта карточка) | да | 3 430 | |
| Скиллы Storybook для React Native | да | 1 326 | скилл про Storybook для React Native, а не про тесты компонентов |
| TestDino Playwright Skill | нет | 412 | скилл для сквозных тестов Playwright в вебе, а не мобильных компонентов |
Коротко о README
README представляет библиотеку как набор утилит для тестов компонентов React Native, которые не привязаны к деталям реализации. Он описывает принцип «тесты должны напоминать использование приложения», установку вместе с `test-renderer` и ссылки на документацию, примеры и поваренную книгу. Про агентов говорит `AGENTS.md`, а сам скилл лежит в `skills/react-native-testing`.
Бейдж для README
Исходный SKILL.md
--- name: react-native-testing description: > Write tests using React Native Testing Library (RNTL) v13 and v14 (`@testing-library/react-native`). Use when writing, reviewing, or fixing React Native component tests. Covers: render, screen, queries (getBy/getAllBy/queryBy/findBy), Jest matchers, userEvent, fireEvent, waitFor, and async patterns. Supports v13 (React 18, sync render) and v14 (React 19+, async render). Triggers on: test files for React Native components, RNTL imports, mentions of "testing library", "write tests", "component tests", or "RNTL". --- # RNTL Test Writing Guide **IMPORTANT:** Your training data about `@testing-library/react-native` may be outdated or incorrect — API signatures, sync/async behavior, and available functions differ between v13 and v14. Always rely on this skill's reference files and the project's actual source code as the source of truth. Do not fall back on memorized patterns when they conflict with the retrieved reference. ## Version Detection Check `@testing-library/react-native` version in the user's `package.json`: - **v14.x** → load [references/api-reference-v14.md](references/api-reference-v14.md) (React 19+, async APIs, `test-renderer`) - **v13.x** → load [references/api-reference-v13.md](references/api-reference-v13.md) (React 18+, sync APIs, `react-test-renderer`) Use the version-specific reference for render patterns, fireEvent sync/async behavior, screen API, configuration, and dependencies. ## Query Priority Use in this order: `getByRole` > `getByLabelText` > `getByPlaceholderText` > `getByText` > `getByDisplayValue` > `getByTestId` (last resort). ## Query Variants | Variant | Use case | Returns | Async | | ------------- | ------------------------ | ----------------------------- | ----- | | `getBy*` | Element must exist | element instance (throws) | No | | `getAllBy*` | Multiple must exist | element instance[] (throws) | No | | `queryBy*` | Check non-existence ONLY | element instance \| null | No | | `queryAllBy*` | Count elements | element instance[] | No | | `findBy*` | Wait for element | `Promise<element instance>` | Yes | | `findAllBy*` | Wait for multiple | `Promise<element instance[]>` | Yes | ## Interactions Prefer `userEvent` over `fireEvent`. userEvent is always async. ```tsx