Es gibt eine open rspec-mocks issue, um dies zu adressieren. Ich hoffe, dass ich es irgendwann ansprechen kann, aber es ist nicht einfach, dies so hinzuzufügen, dass vorhandene Spec-Suites, die any_instance
verwenden, nicht mit einer Blockimplementierung gebrochen werden, weil wir ein zusätzliches Argument liefern würden (zB das Objekt) Beispiel).
Insgesamt kann any_instance
in einigen Situationen nützlich sein, aber es ist ein bisschen ein Geruch, und Sie haben im Allgemeinen weniger Probleme, wenn Sie eine Möglichkeit finden können, einzelne Instanzen zu verspotten oder zu stubben.
Hier ist eine Arbeit um, dass ich nicht getestet habe, sollte aber funktionieren:
orig_new = MyObject.method(:new)
MyObject.stub(:new) do |*args, &block|
orig_new.call(*args, &block).tap do |instance|
instance.stub(:fetch) { instance }
end
end
Im Wesentlichen sind wir any_instance
hier durch Einhaken in MyObject.new
simuliert, so dass wir fetch
auf jede neue Instanz Stummel können, die instanziiert wird.
Alles, was gesagt wird, ist es wichtig, "auf Ihre Tests zu hören", und wenn etwas schwer zu testen ist, überlegen Sie, was das über Ihr Design sagt, anstatt sofort Elektrowerkzeuge wie any_instance
zu verwenden. Ihre ursprüngliche Frage gibt mir nicht genügend Kontext, um etwas über Ihr Design zu spekulieren, aber es ist definitiv, wo ich anfangen würde, wenn ich dazu gezwungen wäre.
ich arbeitete nett für mich! Danke vielmals! – jethroo