Как вы опровергаете наличие опции с has_select Capybara?

Учтите, что у вас есть список выбора с помощью только следующей опции:

<option>Second Fake Option</option>

И вы хотели бы утверждать, что список выбора не содержит опции с текстом «Fake Option»:

<option>Fake Option</option>

Когда кто-то опровергает это так:

refute has_select?('list_id',
  with_options: ['Fake Option'])

Тест не проходит. Кажется, что Capybara успешно частично сопоставляет текст Fake Option с текстом Second Fake Option . Более того, следующее:

refute has_select?('select_id',
  with_options: [''])

Тем не менее следующие проходы:

refute has_select?('select_id',
  with_options: ['BORK'])

Документация для with_options: и options: описывает поведение в отношении списка параметров, которые мы пытаемся сопоставить, но не говорит об этом поведении, которое частично соответствует самому тексту. Другие вопросы здесь, на SO, относятся к тому же документированному поведению ... но не адресуют опровержение или соответствие текста параметров.

Хотя я мог бы assert противоположное поведение с options: вот так:

assert has_select?('select_id',
  options: ['Second Fake Option'])

Это может быть болью, когда у вас есть длинный список выбора и вы хотите опровергнуть наличие одного конкретного параметра в списке.

Как правильно опровергнуть наличие определенной опции в списке выбора?

Всего 1 ответ


Частичное согласование текста - это поведение по умолчанию, но его можно переопределить с помощью: точной опции. Кроме того, вместо опровержения предиката вы должны вызвать refute_select - сообщения об ошибках будут намного лучше

refute_select('select_id', with_options: ['Fake Option'], exact: true)

Примечание: это также будет проходить, если на странице не было элемента select_id, который может быть не таким, каким вы хотите. Если вы хотите проверить, что выбор существует, но он не имеет определенной опции, тогда что-то вроде

select = find_field('select_id')
refute_selector(select, :option, 'Fake Option', exact:  true)

может быть то, что вы хотите, что также можно было бы сделать со спичками как

select = find_select('select_id')
refute_matches_selector(select, :select, with_options['Fake Option'], exact: true)

Есть идеи?

10000