Rspec 为什么可以';我不能在to_raise matcher中找到Capybara::Element吗? pry#expect(find(#recipients”)。引发_错误(Capybara::ElementNotFound) Capybara::ElementNotFound:找不到可见的css“#收件人”

Rspec 为什么可以';我不能在to_raise matcher中找到Capybara::Element吗? pry#expect(find(#recipients”)。引发_错误(Capybara::ElementNotFound) Capybara::ElementNotFound:找不到可见的css“#收件人”,rspec,capybara,Rspec,Capybara,我知道测试某些元素“未”找到是很困难的,而且可能会出错,但我相信我的用例是一个好的用例 我正在尝试制作一个“Don#u find matcher…”您的问题是,您试图将find(“#recipients”)直接传递给expect,但这不起作用,因为find会引发异常,因此expect甚至从未被调用。您应该通过一个街区,如下所示: pry#<> expect(find("#recipients")).to raise_error(Capybara::ElementNotFound) C

我知道测试某些元素“未”找到是很困难的,而且可能会出错,但我相信我的用例是一个好的用例


我正在尝试制作一个“Don#u find matcher…”

您的问题是,您试图将
find(“#recipients”)
直接传递给
expect
,但这不起作用,因为
find
会引发异常,因此
expect
甚至从未被调用。您应该通过一个街区,如下所示:

pry#<> expect(find("#recipients")).to raise_error(Capybara::ElementNotFound)
Capybara::ElementNotFound: Unable to find visible css "#recipients"

您的问题是试图将
find(“#recipients”)
直接传递给
expect
,但这不起作用,因为
find
引发异常,因此从未调用
expect
。您应该通过一个街区,如下所示:

pry#<> expect(find("#recipients")).to raise_error(Capybara::ElementNotFound)
Capybara::ElementNotFound: Unable to find visible css "#recipients"

Alex D的回答是正确的,但为什么不干脆做
expect(第页)。不要有
css('receipts')
expect(第页)。不要有
css('receipts')
,它们是实际的期望,而不是一个'dont\u find'方法,或者可能是一个自定义的选择器和/或助手方法
有\u receipts
,等-如果你想变得更复杂。这是一个合理的问题,但在查找和拥有css之间有一个非常微妙但极其重要的区别。Find实际上确保选择器“可见”,而have_css则不可见。在我的例子中,选择器实际上在页面上,但是是隐藏的。我最初尝试过这样的实现,但没有成功。遗憾的是,这在#find的文档中并不明显。异常显示它正在查找“可见”元素:Capybara::ElementNotFound:找不到可见css“abc”这一点你错了--
find
都默认检查css的可见性。如果你的情况不是这样,那将是一个严重的错误,你应该提交一个关于水豚项目的问题。只是为了澄清为什么我知道我在这方面是正确的-我是水豚的现任作者。因此,如果您确实有一个案例,
have_css
没有验证可见性,请在Capybara上提交一个问题,以便我确认和修复。也许我使用的不是have_css(have_css?),但当选择器出现在页面上时,我使用的第一个实现返回true,可见或不可见。Alex D的答案是正确的,但为什么不干脆做
expect(第页)。不想做css('recipients')
expect(第页)。不想做css('recipients')
,这是实际的期望,而不是一个''dont\u find'方法,或者可能是一个自定义的选择器和/或助手方法
让收件人
,等-如果你想变得更复杂。这是一个合理的问题,但在查找和拥有css之间有一个非常微妙但极其重要的区别。Find实际上确保选择器“可见”,而have_css则不可见。在我的例子中,选择器实际上在页面上,但是是隐藏的。我最初尝试过这样的实现,但没有成功。遗憾的是,这在#find的文档中并不明显。异常显示它正在查找“可见”元素:Capybara::ElementNotFound:找不到可见css“abc”这一点你错了--
find
都默认检查css的可见性。如果你的情况不是这样,那将是一个严重的错误,你应该提交一个关于水豚项目的问题。只是为了澄清为什么我知道我在这方面是正确的-我是水豚的现任作者。因此,如果您确实有一个案例,
have_css
没有验证可见性,请在Capybara上提交一个问题,以便我确认和修复。也许我使用的不是have_css(have_css?),但当选择器出现在页面上时,我使用的第一个实现返回true,是否可见。如果要断言某个元素是否存在,那么最好使用has_css之类的水豚匹配器?带着rspec的期望,我认为@bott这是一个很好的观点。我只是复制了OP的代码并修复了他的bug,但没有考虑以完全不同的方式编写断言。如果你愿意,你可以发布另一个答案。如果你想断言一个元素是否存在,这是一个更好的解决方案,使用水豚匹配器,比如has\u css?带着rspec的期望,我认为@bott这是一个很好的观点。我只是复制了OP的代码并修复了他的bug,但没有考虑以完全不同的方式编写断言。如果你愿意,你可以发布另一个答案。