我希望能够指定当 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()
用 a包装时模拟 TimeoutError timeout() {}
,那次我放弃了,只是通过打开课程而导致实际超时发生。我显然可以通过尝试调用无效的 URL 来引发 SocketError,但我确信有一种正确的方法可以使用 RSpec 来模拟它。
更新:我显然没有在深夜想清楚,错误实际上是当我在 SocketError 之后重新尝试 URL 时,and_raise(SocketError) 部分工作正常。