gpt4 book ai didi

ruby-on-rails - 带有 Capybara have_css 匹配器的 Rspec 不起作用

转载 作者:行者123 更新时间:2023-12-04 22:11:24 29 4
gpt4 key购买 nike

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

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

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

返回
'btn product in-cart'

所以按钮肯定有'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'、expect (etc).to have_selector、expect(etc.has_selector?('.in-cart')).to 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com