2013-05-01 18 views
9

Ho un test rspec che registra un'azione. Nell'azione, una variabile di sessione è sicuramente impostata, tuttavia nel mio test del controller, l'hash della sessione è vuoto. Come posso verificare un test Rspec per vedere se il controller imposta la variabile di sessione sul valore corretto?Test Rspec se è stata impostata una variabile di sessione in un'azione del controller

+0

Quindi qual è stata la vera causa di questo? (dal momento che hai risposto con una risposta ma non hai spiegato) – lulalala

+0

La risposta è stata corretta per la domanda che ho posto, ma il mio problema è risultato non correlato alla mia domanda – chris

risposta

15

È possibile accedere alla sessione direttamente in rspec in questo modo: session[:key]. Basta confrontare quello con il valore che desideri.

+1

scusa penso che avrei dovuto dire che cosa ho provato. l'ho provato, ma la sessione era vuota. la specifica ha una sessione vuota ma usando il controller nel modo normale, funziona – chris

+1

@Chris, l'ho fatto per molte volte quindi so che funziona. Si prega di incollare il codice, se necessario. –

0

Usi qualsiasi before_filter nel controller? Questo potrebbe essere il caso, se before_filter cambia il flusso e il tuo codice con l'assegnazione di una variabile alla sessione non è nemmeno valutato.

Per esempio si può avere questa linea nel controller:

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

Questo significa che se non si è effettuato l'accesso, non entrerete qualsiasi metodo in questo controller. Quindi la variabile session sarà vuota.

3

Vedere this. Il problema principale è che la variabile session non è accessibile dal codice di prova. Per risolverlo, aggiungi le linee di gallinelle a spec/spec_helper.rb:

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

questa era probabilmente la risposta a ciò che era veramente sbagliato nel momento in cui ho postato questo. – chris

Problemi correlati