RSpec例外

时间:2015-03-20 14:42:22

标签: ruby multithreading rspec

我正在创建一个RSpec测试来验证从网页检索的数据。我调用网页的URL,然后验证返回的数据是否正确。但是,部分测试涉及重置后端,因此,服务器无法访问的时间很短。我想要一个RSpec测试,期望返回的数据是预期的内容。但是,在服务器重置的小时间内,我收到连接拒绝异常,此异常导致整个测试失败。我想以某种方式执行RSpec期望并忽略抛出的所有异常。例如(伪代码):

Thread.new{"reset server code"}
wait_until{expect("retrieve server url data code").to eq("expected data").and ignore all exceptions()}

在重置周期中服务器将处于特定状态,因此,我启动一个线程并等待在该状态期间返回预期数据。这就是为什么我不等待重置完成然后点击URL。关于如何对某些事情进行期望并忽略所有异常的任何想法都会很棒。我不使用.to raise_error,因为由于时间问题,我不确定在wait_until期间我将收到多少次异常(注意,这是执行代码的包装器,直到达到预期为止)。我理想喜欢等到返回的数据正确并忽略过程中的所有异常。

1 个答案:

答案 0 :(得分:0)

最简单的方法可能是rescue来自连接错误和retry

begin
  expect("retrieve server url data code").to eq("expected data")
rescue SomeConnectionError
  sleep 1
  retry
end

retry关键字已记录为here

  

您可以重试获救的例外:

begin
  # ...
rescue
  # do something that may change the result of the begin block
  retry
end
     

执行将在开始块的开头重新开始,所以要小心   不要创造一个无限循环。