2012-01-02 10 views
9

Quiero anular un usuario conectado (con Devise/Warden) utilizando rspec mocks en un conjunto de pruebas de Capybara en mi aplicación Rails. Esto ahorraría una tonelada de tiempo, y significaría que mi suite de prueba puede/se ejecutará regularmente.Cómo anular Warden/Devise con Rspec en la prueba de Capybara

Anteriormente era capaz de hacer esto utilizando authlogic por apagando mi modelo de sesión con un poco de código como este:

def login(user) 
    user_session = mock_model(UserSession, {:user => user}) 
    UserSession.stub(:find).and_return(user_session) 
end 

ahora que estoy usando Diseñar, i ya no tienen acceso a un objeto UserSession. Y dado que estoy usando capibara para probar mi código, no tengo acceso directo al objeto de solicitud para usar el dispositivo construido en el sign_in auxiliar de prueba.

Mi pregunta es: ¿cómo puedo simular un usuario conectado con capybara, idear y especular sin requerir que cada escenario con un usuario conectado primero vaya a la ruta de registro, complete el formulario, envíe, espere para la respuesta, y luego ir a la página deseada?

+1

lo que pidieron, pero por si acaso [login.rb] (https://github.com/gitlabhq/gitlabhq /blob/master/spec/support/login.rb) y [sample_use.rb] (https://github.com/gitlabhq/gitlabhq/blob/master/spec/requests/dashboard_issues_spec.rb) – clyfe

+0

Gracias por la respuesta , Ya tengo algo así que estoy tratando de evitar. Aunque su comentario es ciertamente útil para aquellos futuros visitantes que podrían no hacerlo. – Schneems

Respuesta

15

Warden viene con ayudantes de prueba incorporados. Le permite iniciar sesión sin tener que usar la interfaz de usuario en sus pruebas de pepino. Simplemente agregue los archivos a continuación en su proyecto.

# features/support/warden.rb

Warden.test_mode! 
World Warden::Test::Helpers 
After { Warden.test_reset! } 

# features/step_definitions/user_steps.rb

Given /^I am logged in as a user$/ do 
    @current_user = User.create!(:username => 'user', :password => 'password') 
    login_as(@current_user, :scope => :user) 
end 

Use Wardens.test_mode! with Capybara

No
+0

Creo que esta es la dirección correcta, pero no puedo hacer que funcione. Los métodos auxiliares se llaman correctamente, pero current_user et. aún no se muestran correctamente en mi aplicación. ¿Esto funciona para tí? – Schneems

+2

Necesitaba especificar mi alcance actual 'login_as @current_user,: scope =>: user' gracias por la ayuda – Schneems

+1

También gracias por vincularme a la página de capibara, en realidad terminé escribiendo que^_^https://github.com/plataformatec/devise/wiki/How-To: -Test-with-Capybara/_history – Schneems

Cuestiones relacionadas