47 Stimmen

RSpec: Stubbing Kernel::sleep?

Gibt es eine Möglichkeit, Kernel.sleep in einem rspec-Szenario zu stubben?

2voto

Mike Punkte 79

Für rspec Version 1 hat sich die Stubbing-Syntax geändert. Dies funktioniert:

allow_any_instance_of(Kernel).to receive(:sleep).and_return("")

Wenn ich es benutze.

0voto

tig Punkte 23120

Ich brauchte einen Stummel, und nach langem Suchen habe ich herausgefunden, dass der einzige Weg, der für mich funktioniert, folgender ist

def method_using_sleep
  sleep
  sleep 0.01
end

it "should use sleep" do
  @expectations = mock('expectations')
  @expectations.should_receive(:sleep).ordered.with()
  @expectations.should_receive(:sleep).ordered.with(0.01)

  def sleep(*args)
    @expectations.sleep(*args)
  end

  method_using_sleep
end

0voto

Automatico Punkte 11394

Ich konnte die anderen Lösungen hier nicht zum Laufen bringen. Vielleicht etwas geändert haben, in der Art und Weise Schlaf in neueren Versionen von Ruby behandelt wird, oder etwas anderes.

Am Ende habe ich das Programm mit einem "Monkey-Patch" versehen. Objekt Klasse, da diese offenbar die Sleep-Aufrufe erhält. Also habe ich einfach dies hinzugefügt:

class Object
    def sleep(*args)
    end
end

Die Einschlafmethode macht also nichts, stattdessen macht sie etwas. Es könnte eine Möglichkeit geben, dies besser zu spotten, aber ich war nicht in der Lage, eine gute Lösung zu finden, ohne die sleep metohd jedes einzelnen Objekts, das es potenziell genutzt hat.

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