Minitest + Capybara:如何检查选项列表是否不包含选项?

Minitest + Capybara: how to check if options list does not contain an option?

在我的应用程序中,我有一个包含一些选项的 select 标签:

<select class="form-control" id="select-course-js">
     <option>course-1</option> 
     <option>course-2</option>
     <option>course-3</option>
</select>

我想实施一个系统测试来检查是否没有课程 4 选项。可以用水豚做吗?如果是这样 - 怎么样? 堆栈:rails5 + Minitest + Capybara

更新。 解决方案(由 Thomas Walpole 提供)

assert_no_select('select-course-js', with_options: ['course-4'])

一种方法是将 id 添加到每个 option 并检查它是否存在...

<select class="form-control" id="select-course-js">
  <option id="crs-1">course-1</option> 
  <option id="crs-2">course-2</option>
  <option id="crs-3">course-3</option>
</select>

然后检查crs-4是否存在。您使用的方法将取决于您的特定逻辑,但这里有几个示例...

assert_no_css('#select-course-js #crs-4')
page.has_css?('#select-course-js #crs-4')

您可以找到其他方法来使用 here

您可以通过

验证带有course-4作为选项的页面上没有select'select-course-js'
assert_no_select('select-course-js', with_options: ['course-4'])

然而,这不会同时验证 select-course-js select 是否在页面上,因此您可能想同时执行这两项操作

assert_select('select-course-js')
assert_no_select('select-course-js', with_options: ['course-4'])

另一种选择是使用可选的过滤器块

assert_select('select-course-js') do |el|
  el.has_no_selector?(:option, 'course-4')
end

但如果测试失败,错误将不会那么明显。