rack non supporta il passaggio nelle sessioni tramite la richiesta di più (Rack> = v1.0). Read this post for more detailed information on that.
Il modo migliore per impostare una variabile di sessione nell'app è chiamare un'azione all'interno dell'applicazione che imposterà la variabile di sessione. Per esempio, se si dispone di un percorso all'interno della vostra app che imposta una variabile di sessione come questo:
post '/set_sess_var/:id'
session[:user_id] = params[:id]
end
Facciamo finta c'è un altro percorso che in realtà voleva mettere alla prova che sta usando la variabile di sessione in questo modo:
get '/get_user_attributes'
User.find(session[:user_id]).attributes
end
Quindi nei test, è necessario prima chiamare il percorso che imposta la sessione, quindi andare su un'altra rotta che lo utilizza. Ecco la notazione RSpec, dato che questo è quello che io uso per la prova:
it "should print out user attributes" do
user_id = 1
post '/set_sess_var/' + user_id
get '/get_user_attributes'
last_response.body.should == User.find(user_id).attributes
end
Se si dovesse andare di utilizzare il percorso di frequente nei test, quindi si potrebbe scrivere un metodo per raggiungere questo obiettivo nel vostro file di prova (se stai usando Rspec, allora questo metodo potrebbe andare nel vostro spec_helper.rb o nel file controller_spec.rb):
def set_session_var(user_id)
post '/set_sess_var/' + user_id
end
e quindi chiamare in vostri test quando si aveva bisogno di essere impostato:
it "should print out user attributes" do
set_session_var(1)
get '/get_user_attributes'
last_response.body.should == User.find(1).attributes
end
Non è la risposta che volevo sentire, ma immagino che non avrò altra scelta che passare attraverso l'intero stack :(Grazie. – Denny
Sì, ti sento. Un po 'fastidioso ma non è troppo difficile se fai un metodo che può chiamare ogni volta che si desidera impostare la sessione, ed è fatto allo scopo di rendere Rack più sicuro (in modo che le persone non possano intercettare la sessione e forgiare chi non è autorizzato), quindi è fatto con buone intenzioni Link – Batkins
è rotta. –