【发布时间】:2010-10-10 05:20:09
【问题描述】:
我希望能够说明当 Open-Uri open() 调用超时或引发异常(例如 SocketError)时,我正在按预期处理事情,但是我遇到了问题。
这是我的规范(针对 SocketError):
@obj.should_receive(:open).with("some_url").and_raise(SocketError)
以及我使用 open-uri 的对象部分:
begin
resp = open(url)
resp = resp.read
rescue SocketError
something = true
end
但是在这种情况下,规范失败,并出现nil.read 错误。
这是我本周第二次遇到这个问题,上一次我试图在用open() 包装 timeout() {} 时模拟 TimeoutError,那次我放弃了,只是导致了实际超时通过开设课程来实现。我可能显然会通过尝试调用无效的 URL 来引发 SocketError,但我确信有一种正确的方法可以使用 RSpec 来模拟它。
更新:我显然没有想清楚,深夜,错误实际上是当我在 SocketError 之后重新尝试 URL 时,and_raise(SocketError) 部分工作正常。
【问题讨论】: