Gibt es eine Möglichkeit, Kernel.sleep in einem rspec-Szenario zu stubben?
Antworten
Zu viele Anzeigen?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
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.
- See previous answers
- Weitere Antworten anzeigen