10

Considérese la siguiente prueba de integración:¿Cómo acceder a la sesión desde Rails Integration Test?

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 

Esto genera el error: undefined method '[]='

Y, cambiando a sess.session[:user] = nil genera un error así: NoMethodError: undefined method 'session' for nil:NilClass

¿Cómo modificar los parametros de sesión de una integración prueba en Rails?

Trabajando en Rails 3.0.7, Ruby 1.9.2p180, marco de prueba de la unidad.

EDITAR:
get '/user_page', nil, {:user => nil} y get ('/user_page', nil, {:user => nil}) generar errores.

+0

¿Esta unidad está probando o probando la integración? :) – Rimian

Respuesta

2

sólo tiene que utilizar session[:user] sin open_session bloque

+1

'session [: user] = nil' no pasa la sesión actualizada al controlador. –

+0

esto funciona en los raíles 2, pero no en los raíles 3 (que es la versión que se usa en la pregunta). –

+0

funciona bien para mí con minitest y rieles 3.1 – NARKOZ

2

Resulta que no parece posible hacer esto.

+0

La respuesta de @NARKOZ funciona perfectamente con rieles 3 – pahnin

3

En Rails 3.2.3 El siguiente parece que funciona para mí:

# 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] 

No estoy seguro si esto va a funcionar para usted, así Goodluck!

-1

Esto no es para lo que las pruebas de integración están diseñadas. No debe modificar la sesión directamente, en su lugar debe golpear su ruta/cerrar sesión.

+2

Sí, pero la pregunta es sobre el acceso a 'sesión'. –

+0

@BorisStitnicky - Sí, y dije que no accedas a la sesión, es erróneo. Lo escribí hace 2 años, pero creo que todavía lo defiendo. – superluminary

Cuestiones relacionadas