8

Empecé a escribir pruebas funcionales para mi aplicación Rails hoy. Uso el complemento de autenticación RESTful. Me encontré con un par de cosas confusas que espero que alguien pueda aclarar por mí.Pruebas funcionales de Ruby on Rails con el complemento RESTful Authentication

1) Escribí una función de inicio de sesión rápido porque la mayoría de las funciones en mi aplicación de rieles requieren autenticación.

def login_as(user) 
    @request.session[:user_id] = user ? user.id : nil 
end 

El problema que veo con esta función es que básicamente falsifica la autenticación. ¿Debería estar preocupado por esto? Quizás esté bien seguir esta ruta siempre que pruebe el verdadero método de autenticación en alguna parte. O tal vez esta es una práctica terrible.

2) La segunda cosa confusa es que en algunos lugares en mis pruebas funcionales, necesito que se realice el proceso de autenticación completo. Cuando un usuario está activado, tengo el método do_activate para crear algunos objetos iniciales para el usuario. Es análogo a la creación de un objeto de cuaderno en blanco y un objeto de pluma para una aplicación de estudiante, si tiene sentido.

Para poder probar mi aplicación correctamente, necesito que el usuario active ese estado de activación para que se creen esos objetos. Actualmente estoy usando Factory Girl para crear el usuario, y luego llamar a la función login_as de autenticación falsa.

Supongo que otra opción sería omitir la secuencia de autenticación completa y simplemente crear los objetos en blanco con Factory Girl. Podría probar la autenticación adecuada en otro lugar.

¿Qué opinas? Si tuviera que seguir la secuencia correcta, ¿por qué el código siguiente no invoca la función do_activate?

user = Factory.create(:user) 
user.active = 1 
user.save 

¡Gracias!

+0

[Aquí hay una pregunta similar que hice] (http://stackoverflow.com/questions/64827/rails-restful-authentication-rspec-how-to-test-new-models-that-require-authen) y un montón de enlaces que junté. – srboisvert

Respuesta

7

Faking it is perfectamente acceptable.

Sin embargo, escriba otras pruebas que garanticen que las cosas que desea proteger están protegidas. Por lo tanto,

test "it should show the profile page" do 
    user = Factory(:user) 
    login_as(user) 
    get :show, :id => user 
    assert_response :success 
end 

test "it should not show the profile page cos I'm not logged in" do 
    user = Factory(:user) 
    get :show, :id => user 
    assert_response :redirect 
end 

¡Siéntete libre de contactarme para hacer un seguimiento!