Предикат
Капибары has_select?
и сопоставитель have_select
ищут элементы HTML <select>
. В зависимости от того, что вы подразумеваете под средством выбора даты, вам придется использовать средство сопоставления, которое будет соответствовать правильному типу элемента, или have_selector
, если нет конкретного сопоставителя. Если вы действительно проверяете элемент <input type="date">
со связанной меткой, содержащей текст «Дата начала», тогда вы можете использовать have_field
matcher:
expect(page).to have_field 'Start date', type: 'date'
Если вы используете помощник вида Rails date_select, он генерирует HTML как
<div class="field">
<label for="post_start_date">Start date</label>
<select id="post_start_date_1i" name="post[start_date(1i)]">
<option value="2014">2014</option>
<option value="2015">2015</option>
...
</select>
<select id="post_start_date_2i" name="post[start_date(2i)]">
<option value="1" selected="selected">January</option>
<option value="2">February</option>
...
</select>
<select id="post_start_date_3i" name="post[start_date(3i)]">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
...
</select>
</div>
Из этого HTML видно, что элемент
expect(page).to have_select('post_start_date_1i')
expect(page).to have_select('post[start_date(2i)]')
...
или вы можете использовать фильтр id
с регулярным выражением и счетчиком, чтобы проверить, что есть 3 элемента, соответствующих
expect(page).to have_select(id: /^post_start_date_[123]i$/, count: 3)
Обратите внимание, что это технически не так "правильно", как делать их по отдельности, поскольку у вас может быть 3 элемента с идентификатором post_start_date_1i, и он все равно будет проходить, но в этом случае ваш HTML также будет недействительным.
Если вы проверяете не тот тип HTML-элемента, вам необходимо предоставить HTML-код, чтобы получить точный ответ.