用 minitest 水豚 rails 测试 show/hide
testing show/hide with minitest capybara rails
我正在尝试测试 div 在单击按钮后的可见性。
assert page.find("#visu")[:class].include?("hidden") # this passes
assert page.has_xpath?("//*[@id='visu'][contains(@style, 'display: none')]")
click_button("Show/hide")
assert page.has_xpath?("//*[@id='visu'][contains(@style, 'display: block')]")
不幸的是,这不起作用。有什么建议吗?
我正在使用'minitest-rails-capybara'
默认情况下,Capybara 仅查找可见元素,因此如果您使用的驱动程序之一可以完全处理 CSS(除 rack_test 之外的几乎所有内容),那么只需执行
assert_selector(:css, '#visu')
足以检查可见元素。如果你想检查一个元素是否特别不可见,你需要做
assert_selector(:css, '#visu', visible: :hidden)
因此,要测试某个元素被隐藏然后变得可见,您可以这样做
assert_selector(:css, '#visu', visible: :hidden)
click_button("Show/hide")
assert_selector(:css, '#visu')
请注意,检查元素是否存在但不可见实际上可能没有意义检查元素是否不存在(可能隐藏,可能不存在)可能更有意义,因为那样如果按钮行为更改为加载元素(或呈现模板),则测试不会中断(并且行为的更改不会改变用户体验)。为此,您可以这样做
refute_selector(:css, '#visu') # or assert_no_selector depending on preference
click_button('Show/hide')
assert_selector(:css, '#visu')
另一方面,如果您使用的是 rack_test 驱动程序,它只会处理 CSS/attributes 的一小部分以确定可见性。在这种情况下,如果元素内联样式属性包含 display: none
/display:none
或者如果元素具有 hidden
属性(不是 class 名称'hidden')。因此,如果元素被 class 名称隐藏,'hide_me' 在外部 css 文件中应用 display:none
,则 rack_test 不会认为该元素已隐藏。相反,你可以做类似
的事情
assert_selector(:css, '#visu.hide_me')
完整的测试应该是这样的
assert_selector(:css, '#visu.hide_me')
click_button("Show/hide")
assert_selector(:css, '#visu:not(.hide_me)')
注意:如果您没有更改 Capybara.default_selector,可以省略 :css 选择器类型参数。此外,使用 assert_selector
断言而不是 assert page.has_xxx?
时,错误消息将更具描述性
我正在尝试测试 div 在单击按钮后的可见性。
assert page.find("#visu")[:class].include?("hidden") # this passes
assert page.has_xpath?("//*[@id='visu'][contains(@style, 'display: none')]")
click_button("Show/hide")
assert page.has_xpath?("//*[@id='visu'][contains(@style, 'display: block')]")
不幸的是,这不起作用。有什么建议吗?
我正在使用'minitest-rails-capybara'
默认情况下,Capybara 仅查找可见元素,因此如果您使用的驱动程序之一可以完全处理 CSS(除 rack_test 之外的几乎所有内容),那么只需执行
assert_selector(:css, '#visu')
足以检查可见元素。如果你想检查一个元素是否特别不可见,你需要做
assert_selector(:css, '#visu', visible: :hidden)
因此,要测试某个元素被隐藏然后变得可见,您可以这样做
assert_selector(:css, '#visu', visible: :hidden)
click_button("Show/hide")
assert_selector(:css, '#visu')
请注意,检查元素是否存在但不可见实际上可能没有意义检查元素是否不存在(可能隐藏,可能不存在)可能更有意义,因为那样如果按钮行为更改为加载元素(或呈现模板),则测试不会中断(并且行为的更改不会改变用户体验)。为此,您可以这样做
refute_selector(:css, '#visu') # or assert_no_selector depending on preference
click_button('Show/hide')
assert_selector(:css, '#visu')
另一方面,如果您使用的是 rack_test 驱动程序,它只会处理 CSS/attributes 的一小部分以确定可见性。在这种情况下,如果元素内联样式属性包含 display: none
/display:none
或者如果元素具有 hidden
属性(不是 class 名称'hidden')。因此,如果元素被 class 名称隐藏,'hide_me' 在外部 css 文件中应用 display:none
,则 rack_test 不会认为该元素已隐藏。相反,你可以做类似
assert_selector(:css, '#visu.hide_me')
完整的测试应该是这样的
assert_selector(:css, '#visu.hide_me')
click_button("Show/hide")
assert_selector(:css, '#visu:not(.hide_me)')
注意:如果您没有更改 Capybara.default_selector,可以省略 :css 选择器类型参数。此外,使用 assert_selector
断言而不是 assert page.has_xxx?