Ответ
Data-атрибуты (data-*) помогают тестировать приложение, не полагаясь на хрупкие селекторы (классы, id). Вот основные способы их использования:
- Уникальные идентификаторы для элементов:
<button data-testid="submit-button">Отправить</button>
- Состояния компонентов:
<div data-state="loading">Загрузка...</div>
- Группировка связанных элементов:
<form data-role="login-form">
<input data-field="email">
<input data-field="password">
</form>
- Тестовые метки для CI/CD:
<section data-qa="user-profile-section">
Лучшие практики:
- Используйте единый префикс (
data-test,data-qa) - Называйте атрибуты осмысленно
- Не используйте их для стилей или логики приложения
- Удаляйте из production-сборки через babel-plugin-react-remove-properties
Ответ 18+ 🔞
А, слушай, смотри, вот эта вся хуйня с data-атрибутами — это ж, блядь, как спасательный круг для тестировщика, когда всё остальное — сплошная хрупкая пизда! Вместо того чтобы цепляться за классы, которые дизайнер переименует, или id, которые разраб нахуй сотрёт, ты просто лепишь на элемент свой спец-признак. И всё, приехали.
Смотри, как это работает, на реальных примерах, чтобы ты, блядь, проникся:
-
Вот тебе, сука, уникальная метка на кнопке. Чтобы не искать её по тексту "Отправить", который ещё переведут на хинди.
<button data-testid="submit-button">Отправить</button>И в тесте пишешь:
getByTestId('submit-button')— и ты её, эту пидораску, уже в руках держишь. Красота, ёпта! -
Состояния компонентов. Допустим, грузится что-то. Вместо того чтобы гадать, появился ли спиннер или класс
is-loading, ты просто смотришь на атрибут.<div data-state="loading">Загрузка...</div>Видишь
data-state="loading"— всё, ясно, пиздец, жди. Видишьdata-state="success"— можно выдыхать, работает. -
Группировка, блядь, целых форм! Чтобы не выцеплять каждый инпут по отдельности, как говно из проруби.
<form data-role="login-form"> <input data-field="email"> <input data-field="password"> </form>Сказал найти
[data-role="login-form"] [data-field="email"]— и тебе сразу нужное поле в этой форме подвезли. Удобно, сука, до охуения! -
Метки для CI/CD, этих ваших конвейеров. Типа, вот этот блок точно должен быть в продакшене, и мы его проверяем.
<section data-qa="user-profile-section">data-qa— типа, quality assurance. Понятно же сразу, зачем этот атрибут, да? Не для красоты.
А теперь, блядь, правила, чтобы не наделать делов:
- Договоритесь на одном префиксе! Либо все
data-test, либо всеdata-qa. А то будет пиздец: один пишетdata-cy, другойdata-e2e, третийdata-autotest-id. Потом ищи-свищи, волк ноги съест. - Имена давай осмысленные. Не
data-id="btn1", аdata-testid="header-main-menu-toggle". Чтобы через месяц самому не охуеть и не гадать, что это за кнопка №1 такая. - Это святое, блядь: НЕ ИСПОЛЬЗУЙ ИХ ДЛЯ СТИЛЕЙ ИЛИ ЛОГИКИ! Это твоя приватная тестовая пометка. Не лезь с ней в CSS (
[data-state] { color: red }) или JS. Это путь в ад и хрупкий пиздец. - И главный финал, в рот меня чих-пых! На продакшене эту всю тестовую разметку надо удалять. Есть же плагины, типа
babel-plugin-react-remove-properties. Настроил — и он все твоиdata-testid,data-qaнахуй вычистит из финальной сборки. Чисто, аккуратно, и лишних байтов нет.
Вот и весь сказ, блядь. Применяй — и тесты перестанут разваливаться от каждого чиха фронтендера.