Ввод метки или тега span для выделения прерываний тестирования компонентов

#html #reactjs #react-testing-library

#HTML #reactjs #react-тестирование-библиотека

Вопрос:

Я использую библиотеку тестирования react для тестирования выпадающего компонента, чтобы проверить, доступна ли конкретная опция в поиске, и раньше она работала должным образом, используя следующий запрос, который утверждает, что опция выбрана или нет.

 expect(
      screen.getByRole('option', {
        name: 'ZAT',
        selected: false,
      })
    ).toBeInTheDocument();
 

Введена новая функция, при которой я выделяю поисковый запрос в списке параметров, и тесты начали прерываться, поскольку введение mark тега or span (с примененным стилем) создает пустое пространство в тестовом средстве визуализации, из-за которого запрос больше не может найти опцию с точным текстом из-за сгенерированных пробеловв имени доступного элемента (даже если пробелы свернуты в DOM)

введите описание изображения здесь

Интересно, есть ли у кого-нибудь какие-либо указания относительно того, как я могу это исправить, чтобы тесты работали должным образом.

введите описание изображения здесь

Комментарии:

1. Я не вижу альтернативы, кроме изменения name того, что вы проверяете, чтобы включить пробелы : screen.getByRole('option', { name: /z a t/i, selected: false }) .

2. Конечно. Это последний вариант, который я имел в виду, если я не придумаю никакого другого решения для его учета.

3. @juliomalves нашел лучшее решение без настройки моих тестовых примеров.

Ответ №1:

После некоторого расследования было найдено лучшее решение проблемы, с которой я столкнулся. Вместо того, чтобы полагаться на имя по умолчанию, которое ассоциируется с элементом, мы можем предоставить aria-label атрибут для рассматриваемых элементов как ARIA triumphs all в соответствии с this article — Используя aria

Введение aria-label в элемент, похоже, устраняет проблему, и тесты работают, как ожидалось, без каких-либо изменений.

 <li
  aria-label="ZAT"
  aria-selected="false"
  class="SearchableDropdown__StyledMenuContent-l5l1l4-4 iNSwly"
  id="downshift-1-item-2"
  role="option"
>
   ....
</li>
 

Комментарии:

1. Знаете ли вы, как выбрать опцию (содержащую вложенные элементы, аналогичные тому, что указан в вашем вопросе), используя UserEvent ? Я пытался использовать опцию UserEvent.click, но это никак не влияет на текстовое поле. В идеале, после выбора, выбранное значение должно появиться в текстовом поле.