Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rspec 块内不在match_内执行,除非_引发和自定义matcher_Rspec_Capybara - Fatal编程技术网

Rspec 块内不在match_内执行,除非_引发和自定义matcher

Rspec 块内不在match_内执行,除非_引发和自定义matcher,rspec,capybara,Rspec,Capybara,我试图将一些代码提取到自定义匹配器中: matcher :have_nav_headers do |headers| match_unless_raises do |page| headers.each do |header| expect(find('.navbar-default')).to have_content(header) end end end matcher :have_nav_headers do |headers| ma

我试图将一些代码提取到自定义匹配器中:

matcher :have_nav_headers do |headers|
   match_unless_raises do |page|
     headers.each do |header|
       expect(find('.navbar-default')).to have_content(header)
     end
   end
end

matcher :have_nav_headers do |headers|
   match_unless_raises do |page|
     within('.navbar-default') do
       byebug
       headers.each do |header|
         expect(page).to have_content(header)
       end
     end
   end
 end

第一个匹配器的性能很好,但是如果我尝试使用第二个版本,我将永远不会进行调试,测试将自动通过。除了使用“in”之外,我看不出两者之间有什么区别,对于我正在编写的其他一些自定义匹配器,我真的更希望能够使用它。

RSpec提供了一个
be\u in
匹配器,它别名为
in
。不幸的是,如果用一个块调用它,它不会引发错误,因为调用它只会创建一个匹配器(但不会对它求值),它实际上也不会对它传递的内容做任何处理。最新版本的Capybara安装了一个代理,以根据传递的参数尝试并路由到中的正确版本的
,因此请更新到当前版本的Capybara,或者尝试调用_元素中的
(而不是
中的
),它是
中Capybara提供的
版本的别名。您还应该能够在
页面
上调用它,以确保调用了正确的版本(
page.within…

page.within和within_元素都工作正常。