在 cucumber 中,使用Rspec和Capybara,我进行了一个测试来检查按钮是否具有类。这里是

expect(@some_button).to have_css(".in-cart")

它失败了,但是
@some_button['class']

退货
'btn product in-cart'

因此该按钮肯定具有“购物车”类。

作为一项临时措施,我将测试改为:
expect(@some_button['class']).to match /in-cart/

这显然是疯了。但是,为什么要使用“have_css”或“has_css”呢?对于显然具有预期类的DOM元素返回false?

此外page.all('。in-cart')包含按钮,因此Capybara绝对可以找到它。

顺便说一句,我也尝试过'button.in-cart','in-cart',期望(etc)。有have_selector,期望(etc.has_selector?('。in-cart'))。be_truthy和所有组合。

最佳答案

have_css匹配器应该应用于父容器而不是实际元素

# your view
<div id="container">
  <div class="in_cart product"></div>
</div>

# your step definition
parent = page.find('div#container')
expect(parent).to have_css(".in-cart")
# => returns true, as there is nested div.in_cart
expect('div#container div').to have_css(".in-cart")
# => returns false, as there is no such selector inside of the latter div

至于精确对象的匹配属性,您必须坚持通过键进行简单查询
element = page.find('div#container div')
element['class'].should include('in-cart')
expect(element['class']).to match /in-cart/

相同的逻辑适用于所有RSpecMatchers

关于ruby-on-rails - 带 capybara have_css匹配器的Rspec无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30701826/

10-13 09:31