RSpec controller stubbing instance_variables

Mam kłopot z wytestowaniem swojego controllera a mianowicie ze zastubowaniem instance variables.
Z góry przepraszam za nazwy zmiennych. Oczywiście są fakowe na potrzeby przykładu:


W skrócie powyższa klasa wykonuje jakąś logikę i posiada instance variables, które trzymają dane dla mnie znaczące tj. wynik operacji w klasie. Następnie chciałbym sobie wytestować controller i test pozytywny wyglądałby tak:

Problem w tym, że chciałbym sobie zastubbować instance variables oraz metodę ‘call’(return z tej metody jest dla mnie nie ważny. Interesują mnie jedynie instance variables). stubbuje sobie call i te instance variables, lecz po spojrzeniu na tą obiekt klasy ‘results’ w controlerze nie widzę aby te instance variables się zastubbowały. Niestety nie wiem co źle robię, więc prosiłbym o wskazówkę. Mam nadzieję, że w miare jasno opisałem problem.
Z góry dziękuję

Tutaj:

Results.instance_variable_set(:@g, my_data1)
Results.instance_variable_set(:@h, my_data2)

ustawiasz zmienne instancji na klasie Results, a nie na obiekcie tej klasy (http://ruby-doc.org/core-2.3.0/Object.html#method-i-instance_variable_set).

Może spróbuj:

allow_any_instance_of(Results).to receive(:g).and_return(my_data1)
allow_any_instance_of(Results).to receive(:h).and_return(my_data2)

1 Like

Dzięki wielkie. Oczywiście zadziałało.
Nie do końca ogarniałem jeszcze działanie ‘allow_any_instance_of’.
Dzięki Wielkie!