2013-05-01 15 views
9

Mam test rspec, który wysyła do akcji. W akcji zmienna sesyjna jest zdecydowanie ustawiona, jednak w moim teście kontrolera wartość skrótu sesji jest pusta. Jak mogę sprawdzić test Rspec, aby sprawdzić, czy kontroler ustawił zmienną sesji na odpowiednią wartość?Test Rspec, jeśli zmienna sesji została ustawiona w akcji kontrolera

+0

Więc jaka była tego rzeczywista przyczyna? (odkąd ty zaznaczyłeś odpowiedź, ale tak naprawdę nie wyjaśniłeś) – lulalala

+0

Odpowiedź była poprawna na pytanie, które zadałam, ale mój problem zakończył się niezwiązaniem z moim pytaniem – chris

Odpowiedz

15

Dostęp do sesji można uzyskać bezpośrednio w rspec: session[:key]. Po prostu porównaj to z żądaną wartością.

+1

Przepraszam zgaduję, że powinienem był powiedzieć, co próbowałem. próbowałem tego, ale sesja była pusta. specyfikacja ma pustą sesję, ale używając kontrolera w normalny sposób, działa – chris

+1

@ Chris, robiłem to wiele razy, więc wiem, że to działa. W razie potrzeby wklej ten kod. –

0

Czy używasz dowolnego sterownika before_filter? Może tak być, jeśli before_filter zmienia przepływ, a Twój kod z przypisaniem zmiennej do sesji nawet nie został oceniony.

Na przykład można mieć ten wiersz w kontrolerze:

# ... 
    before_filter :authenticate_user! 
# ... 

Oznacza to, że jeśli nie jesteś zalogowany, nie wejdziecie żadnej metody w tym kontrolerze. Tak więc zmienna session będzie pusta.

3

Zobacz this. Głównym problemem jest to, że zmienna session nie jest dostępna z kodu testowego. Aby rozwiązać ten problem, dodaj linie puszczania pod adresem: spec/spec_helper.rb:

def session 
    last_request.env['rack.session'] 
end 
+0

to była prawdopodobnie odpowiedź na to, co faktycznie było złe w momencie, kiedy to opublikowałem. – chris

Powiązane problemy