10

Si consideri il seguente test di integrazione:Come accedere alla sessione dal test di integrazione di Rails?

test "if there is no user in session, redirect to index and flash message" do 
    open_session do |sess| 
    post '/login', :email => users(:client).email, :password => 'rumpelstiltskin' 
    sess[:user] = nil 
    get '/user_page' 
    assert_redirected_to index_path 
    assert_equal "Your session has expired. Please log in again", flash[:notice] 
    end  
end 

Questo genera l'errore: undefined method '[]='

E, cambiando a sess.session[:user] = nil genera un errore così: NoMethodError: undefined method 'session' for nil:NilClass

Come si modificano i params sessione da un'integrazione test in Rails?

Utilizzo in Rails 3.0.7, Ruby 1.9.2p180, framework di test unità.

MODIFICA:
get '/user_page', nil, {:user => nil} e get ('/user_page', nil, {:user => nil}) generare errori.

+0

Questo test dell'unità o test di integrazione? :) – Rimian

risposta

2

Basta usare session[:user] senza open_session blocco

+1

'session [: user] = nil' non passa la sessione aggiornata al controller. –

+0

funziona su rotaie 2, ma non su rotaie 3 (che è la versione utilizzata nella domanda). –

+0

funziona correttamente con minitest e binari 3.1 – NARKOZ

2

Si scopre che non sembra possibile fare questo.

+0

La risposta di @NARKOZ funziona bene con le guide 3 – pahnin

3

In Rails 3.2.3 seguente sembra funzionare per me:

# Hit the root_path to start our session 
get root_path 

# A helper method to set our session 
login_as(@user_fixture) 

# Now we can access the session variable 
assert session[:user_id] 

Non sono sicuro se questo sarà il lavoro per voi, in modo da Goodluck!

-1

Questo non è ciò per cui sono stati progettati i test di integrazione. Non dovresti modificare direttamente la sessione, dovresti invece premere il tuo percorso/disconnessione.

+2

Sì, ma la domanda riguarda l'accesso a 'sessione'. –

+0

@BorisStitnicky - Sì, e ho detto di non accedere alla sessione, è sbagliato. Ho scritto questo 2 anni fa, ma penso di esserlo ancora. – superluminary

Problemi correlati