Все давно тестируют компоненты React через Enzyme, и есть разные подходы для тестирования поведения компонента в зависимости от внешних условий и поведения пользователя.
Мне нужно проверить что компонент содержит кнопку, которая открывает окно при нажатии на неё.
Выходит, нужно искать кнопку, делать по ней клик, и проверять поведение (экшены, новую разметку, что-угодно).
Так вот, как искать кнопку (?):
1. Искать тег (button) с нужным текстом кнопки
2. Искать компонент кнопки (если сделать её отдельным компонентом), и проверить наличие компонента, а тесты открытия окна, собственно, писать уже для того самого компонента кнопки, т.е. не смешивать всё воедино
3. Искать любой элемент по тексту кнопки
Варианты №1 и №3 приводят к хрупкости тестов и навязыванию реализации (поменяли текст или тег, и тест сломан, хотя компонент работает верно)
Вариант №2 приводит к тому, что тестируется наличие компонента в компоненте, а не реальное поведение самого компонента. Это реальный не хрупкий тест, но тесты становятся неразделимы, т.е. не написав тесты для дочернего компонента, текущие тесты смысла не покажут реального поведения компонента.
Как обойти оба ограничения и реализовать тест не вникая в реализацию компонента?
Пока ожидаю ответ "никак", ранее (давно) уже видел что люди пишут что завязка на разметку компонента минимум на 1 уровень не обойти в таком случае, но всё-таки?)
Сам пока склоняюсь к варианту №2, потому что такие тесты максимально не хрупкие, и поведение компонентов тестируется изолированно, точечно (т.е. без необходимости лезть до нужных компонентов через кучу обертки).