match_unless_raises 和自定义匹配器中未执行的块内
Within block not executed inside match_unless_raises and custom matcher
我试图将我的一些代码提取到自定义匹配器中:
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
第一个匹配器会执行得很好,但如果我尝试使用第二个版本,我永远不会遇到调试,并且测试会自动通过。除了使用 'within' 之外,我看不出两者之间有任何区别,对于我正在编写的其他一些自定义匹配器,我真的更希望能够使用它。
RSpec 提供了一个 be_within
匹配器,它别名为 within
。不幸的是,如果用块调用它不会引发错误,并且由于调用它只是创建一个匹配器(但从不评估它)它实际上也不会对它传递的内容做任何事情。最近的版本 Capybara 安装了一个代理来尝试根据传递的参数路由到 within
的正确版本,因此要么更新到 Capybara 的当前版本,要么尝试调用 within_element
(而不是 within
) 这是 Capybara 提供的 within
版本的别名。您还应该能够在 page
上调用它以确保调用正确的版本 (page.within ...
)
我试图将我的一些代码提取到自定义匹配器中:
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
第一个匹配器会执行得很好,但如果我尝试使用第二个版本,我永远不会遇到调试,并且测试会自动通过。除了使用 'within' 之外,我看不出两者之间有任何区别,对于我正在编写的其他一些自定义匹配器,我真的更希望能够使用它。
RSpec 提供了一个 be_within
匹配器,它别名为 within
。不幸的是,如果用块调用它不会引发错误,并且由于调用它只是创建一个匹配器(但从不评估它)它实际上也不会对它传递的内容做任何事情。最近的版本 Capybara 安装了一个代理来尝试根据传递的参数路由到 within
的正确版本,因此要么更新到 Capybara 的当前版本,要么尝试调用 within_element
(而不是 within
) 这是 Capybara 提供的 within
版本的别名。您还应该能够在 page
上调用它以确保调用正确的版本 (page.within ...
)