2009-07-16 6 views
20

Ich schreibe eine RSPC-Tests für meinen Controller und ich kann nicht Lösung folgenden Problem finden. Für einen der Randfalltests muss ich den Wert einer Instanzvariablen überprüfen. Wie kann ich darauf zugreifen, ohne den Accessor zu definieren? Standardmäßig die üblichen:RoR und RSpec: Wie kann auf Controller-Instanzvariablen zugegriffen werden, ohne Accessoren zu definieren?

controller.variable.should == '3.15' 

funktioniert nicht.

definiert

attr_reader: variable

nur die Tests zu machen passieren wären dumm und ich bin sicher, dass es ein inteligent Weg.

Antwort

43
controller.instance_variable_get(:var) 

, wenn Sie selbst tun dies finden, können Sie Ihre Herangehensweise an Informationen zu überdenken zu verstecken, so dass Sie wesentliche Verhalten testen, anstatt zufällige Implementierungsdetails. Ihre Tests sollten sicherstellen, dass das "Ding" so funktioniert, wie es sollte, ohne zu stark an die jeweilige Implementierung gebunden zu sein.

EDIT: Ist nicht assigns(:var) die Schienen testen Magie für die gleiche Sache mit Controllern?

+0

Ja, wahrscheinlich hast du recht - ich sollte die Ergebnisse der Aktion anstelle der Implementierungsdetails testen. Danke trotzdem. –

+6

um fair zu sein, für Controller, Instanz Variablen sind Dinge, die getestet werden sollten. Ich habe diese Frage vor dem Kaffee beantwortet. –

+1

assigns (: var) ist korrekt – codecraig

Verwandte Themen