Istnieje open rspec-mocks issue, aby rozwiązać ten problem. Mam nadzieję, że w pewnym momencie uda mi się go rozwiązać, ale nie jest łatwo dodać to w sposób, który nie niszczy istniejących specyfikacji, które używają any_instance
z implementacją blokową, ponieważ zaczęlibyśmy generować dodatkowy argument (np. Obiekt instancja).
Ogólnie rzecz biorąc, any_instance
może się przydać w niektórych sytuacjach, ale jest trochę powonieniem, a generalnie będziesz mieć mniej problemów, jeśli znajdziesz sposób na udawanie lub odgadywanie poszczególnych instancji.
Oto pracę wokół, że nie testowałem, ale powinno działać:
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
Zasadniczo jesteśmy symulowanie any_instance
tutaj przez zahaczenie do MyObject.new
tak, że możemy skrótową fetch
na każdy nowy przykład, że jest tworzony.
Wszystko, co powiedzieliśmy, jest ważne, aby "słuchać twoich testów", a gdy coś jest trudne do sprawdzenia, rozważ to, co mówi o twoim projekcie, zamiast natychmiast korzystać z narzędzi elektrycznych, takich jak any_instance
. Twoje pierwotne pytanie nie daje mi wystarczającego kontekstu, aby spekulować cokolwiek na temat twojego projektu, ale zdecydowanie jest to miejsce, od którego zacznę w obliczu konieczności zrobienia tego.
Pracowałem dla mnie dobrze! Wielkie dzięki! – jethroo