我正在创建一个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期间我将收到多少次异常(注意,这是执行代码的包装器,直到达到预期为止)。我理想喜欢等到返回的数据正确并忽略过程中的所有异常。
答案 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
执行将在开始块的开头重新开始,所以要小心 不要创造一个无限循环。