Я хочу иметь возможность указать, что когда 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
.
Это второй раз на этой неделе, когда я сталкивался с этой проблемой, в прошлый раз, когда я пытался смоделировать TimeoutError при переносе open()
с timeout() {}
, в этот раз я сдался и просто вызвал фактический тайм-аут случиться, открыв класс. Я мог бы , очевидно, заставить это вызвать SocketError, пытаясь вызвать недопустимый URL, но я уверен, что есть правильный способ сделать это с помощью RSpec.
Обновление: Я, очевидно, не думал ясно, что поздно ночью ошибка была на самом деле, когда я снова пробовал URL после SocketError, часть and_raise (SocketError) работала нормально.