2009-07-16 5 views
20

Sto scrivendo un test rspec per il mio controller e non riesco a trovare la soluzione seguente problema. Per uno dei test del caso limite devo verificare il valore di una variabile di istanza. Come posso accedervi senza dover definire l'accessorio? Per impostazione predefinita, il solito:RoR e RSpec: come accedere alle variabili di istanza del controllore senza definire gli accessor?

controller.variable.should == '3.15' 

non funziona.

Definizione

attr_reader: variabile

solo per fare i test passano sarebbe sciocco e sono sicuro che ci sia un modo più inteligent.

risposta

43
controller.instance_variable_get(:var) 

se vi trovate a fare questo, si potrebbe desiderare di ripensare il tuo approccio alle informazioni nascondere in modo che si sta verificando un comportamento essenziale piuttosto che i dettagli di implementazione incidentali. I test dovrebbero garantire che la "cosa" funzioni come dovrebbe senza essere troppo legata alla particolare implementazione.

MODIFICA: non è il assigns(:var) i binari che testano la magia per fare la stessa cosa con i controller?

+0

Sì, probabilmente hai ragione: dovrei testare i risultati dell'azione anziché i dettagli di implementazione. Grazie comunque. –

+6

per essere corretti, per i controllori, le variabili di istanza sono cose che dovrebbero essere testate. Ho risposto a questa domanda prima del caffè. Gli assegnamenti –

+1

(: var) sono corretti – codecraig

Problemi correlati