Ich möchte in der Lage sein, zu spezifizieren, dass, wenn Open-Uri open() Anrufe entweder Timeout oder eine Ausnahme wie SocketError auslösen ich Dinge wie erwartet behandeln, aber ich habe Probleme mit diesem.
Hier ist meine Spezifikation (für SocketError):
@obj.should_receive(:open).with("some_url").and_raise(SocketError)
Und der Teil meines Objekts, in dem ich open-uri verwende:
begin
resp = open(url)
resp = resp.read
rescue SocketError
something = true
end
In dieser Situation scheitert die Spezifikation jedoch wie bei einer nil.read
Fehler.
Dies ist das zweite Mal in dieser Woche, dass ich auf dieses Problem gestoßen bin. Das letzte Mal habe ich versucht, einen TimeoutError zu simulieren, wenn ich einen Wrapper open()
mit einer timeout() {}
Ich habe dann aufgegeben und einfach eine tatsächliche Zeitüberschreitung verursacht, indem ich die Klasse geöffnet habe. I könnte offensichtlich dazu führen, dass dies einen SocketError durch den Versuch, eine ungültige URL aufrufen, aber ich bin sicher, es gibt einen richtigen Weg, dies mit RSpec zu spötteln.
Aktualisierung: Ich war offensichtlich nicht klar denken, dass spät in der Nacht, der Fehler war eigentlich, wenn ich wieder versucht, die URL nach dem SocketError, die and_raise(SocketError) Teil funktionierte gut.