5 Stimmen

RSpec und Open-URI wie kann ich einen SocketError/TimeoutError auslösen?

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X