有没有办法强迫黄瓜方案失败?
我需要在每次测试结束时检查一些失败的情况。所以我认为我可以检查一个“错误”对话框,然后如果它发生就失败了测试。
这可以使用下面的代码,但是有问题。一旦我在失败中提出异常!函数,然后黄瓜停止运行After钩子的其余部分,因此注销函数不会被调用。
当时:
After() do |scenario|
#Checking for Error popups
if page.has_selector?(:dialog_message, 1, :text => 'Error')
fail!(raise(ArgumentError.new('Unexpected Error dialog!')))
end
logout
end
现在:
After() do |scenario|
#Checking for Error popups
if page.has_selector?(:dialog_message, 1, :text => 'Error')
scenario.fail!(logout)
end
end
是否有更好的方法可以在没有异常的情况下使黄瓜测试失败?
答案 0 :(得分:8)
使用正常的断言可以使挂钩失败。对Capybara / rspec例外没有做太多,但我认为你可以这样做:
page.should have_selector?(:dialog_message, 1, :text => 'Error')
但是,如果您这样做或执行scenario.fail!(),您仍然无法注销。您需要将其包装在begin-ensure块中。
试试这个:
After do |scenario|
begin
page.should have_selector?(:dialog_message, 1, :text => 'Error')
ensure
logout
end
end
<强>更新强>
如果您不想调用标准断言并直接使方案失败,则可以执行以下操作 - 您需要使用fail
而不是fail!
:
After() do |scenario|
begin
#Checking for Error popups
if page.has_selector?(:dialog_message, 1, :text => 'Error')
fail(ArgumentError.new('Unexpected Error dialog!'))
#Or you can just do fail('Unexpected Error dialog') if you do not care about the type.
end
ensure
logout
end
end
答案 1 :(得分:3)
只是一个初步答案,因为我还没有检查出来,但我认为调用Raise
始终保证停止执行(除非它在proc或lambda中完成所以它的评估推迟)。
尝试简单
if page.has_selector?(:dialog_message, 1, :text => 'Error')
scenario.fail!(StandardError.new('Unexpected Error Dialog!'))
end
logout