реакция-тестирование-библиотека зачем использовать идентификатор теста - PullRequest
4 голосов
/ 14 марта 2019

Я использую реагирующую библиотеку. В документе написано

Обратите внимание, что использование этого в качестве аварийного люка для запроса по классу или идентификатору является плохая практика, потому что пользователи не могут видеть или идентифицировать эти атрибуты. использование свидетель, если вам нужно.

Мне было интересно, почему это плохая практика. Я не хочу засорять мой код data-testid. У меня уже есть идентификаторы и classNames в моем компоненте. Почему их не рекомендуется использовать?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 14 марта 2019

Хороший вопрос.На первый взгляд, это не имеет особого смысла, поскольку пользователи также не могут видеть или идентифицировать свидетельства.

Я бы сказал, что это сводится к минимизации последствий.Если ваш тестовый код запрашивает по классу или идентификатору, другие разработчики с большей вероятностью будут копировать пасты, чем те, которые используют testid, просто потому, что вам нужно добавить testids к компонентам, что, как вы видели, не кажется правильным.Используя тестид говорит: «У меня нет хороших вариантов, я вынужден это сделать».

2 голосов
/ 14 марта 2019

react-testing-library в первую очередь предназначен для функционального тестирования черного ящика. Использование селекторов, специфичных для реализации, может означать, что тест проверяет реализацию, а не поведение, которое может наблюдать пользователь. Хотя использование data-testid обозначает, что оно однозначно и было добавлено намеренно, чтобы упростить тестирование, в то время как селекторы могут быть неоднозначными и случайно изменяться при изменении реализации.

Это не означает, что обычные селекторы не должны использоваться, если они уже служат цели, если разработчик не использует их для тестирования реализации в функциональных тестах.

Это также не означает, что react-testing-library нельзя использовать для тестирования реализации в изолированных модульных тестах. Это на самом деле может, но для этого отсутствуют необходимые функции, поэтому это приводит к большому количеству шаблонного кода по сравнению с Enzyme, который был разработан для этого.

...