2009-07-16 13 views
20

Piszę testy rspec dla mojego kontrolera i nie mogę znaleźć rozwiązania następującego problemu. Do jednego z testów przypadków skrajnych potrzebuję zweryfikować wartość jednej zmiennej instancji. Jak mogę uzyskać do niego dostęp bez konieczności definiowania akcesora? Domyślnie zwykle:RoR i RSpec: Jak uzyskać dostęp do zmiennych instancji kontrolera bez definiowania akcesorów?

controller.variable.should == '3.15' 

nie działa.

Definiowanie

attr_reader: Zmienna

tylko, aby przejść testy byłoby głupie i jestem pewien, że jest bardziej inteligentny sposób.

Odpowiedz

43
controller.instance_variable_get(:var) 

jeśli znajdziesz się w ten sposób, może warto przemyśleć swoje podejście do ukrywania informacji tak, że testują istotny problem, a nie przypadkowe szczegóły implementacji. Twoje testy powinny zapewnić, że "rzecz" działa tak, jak powinna, nie będąc zbyt ściśle związanym z konkretną implementacją.

EDYCJA: Czy nie jest assigns(:var) testowanie magii szyn, aby zrobić to samo ze sterownikami?

+0

Tak, prawdopodobnie masz rację - powinienem przetestować wyniki działania zamiast szczegółów implementacji. Dzięki i tak. –

+6

Aby być sprawiedliwym, dla kontrolerów zmiennymi instancji są rzeczy, które powinny zostać przetestowane. Odpowiedziałem na to pytanie przed kawą. –

+1

Przypisania (: var) są poprawne – codecraig

Powiązane problemy