2010-09-02 7 views
7

Tengo un número de escenarios de pepino que se ejecutan con capibara en un proyecto en el que estoy trabajando.Inicie sesión en authlogic sin tener que completar el formulario cada vez

La mayoría de estos escenarios comienzan con un paso "Dado que estoy conectado". Actualmente mi implementación de esto es:

visit path_to('the login page') 
    fill_in('Username', :with => 'user') 
    fill_in('Password', :with => 'password') 
    click_button('Login') 

Esto funciona bien, sin embargo, se está convirtiendo en un poco lento tener que cargar y enviar el formulario de inicio de sesión antes de cada escenario único.

¿Hay alguna manera de simplemente configurar la sesión en este paso sin tener que pasar por el formulario cada vez?

Respuesta

0

puede utilizar de fondo en cucumber..ie

Background: 
    Given I am a logged-in admin user 

que se secarán sus escenarios.

http://github.com/aslakhellesoy/cucumber/wiki/background

+1

Gracias por la respuesta. De hecho, ya lo tenía, el problema estaba en la implementación de ese paso: físicamente tener que ir al formulario cada vez y completar la página era lento, y un poco innecesario, solo necesito probarlo una vez. Al final, resolvimos esto anulando la sesión del usuario. – AlistairH

2

Un poco tarde para el espectáculo como de costumbre, pero esto funciona para mí en los carriles 3.0.10.

En features/support/authlogic.rb:

require "authlogic/test_case" 
World(Authlogic::TestCase) 
ApplicationController.skip_before_filter :activate_authlogic 
Before do 
    activate_authlogic 
end 

Luego, en features/step_definitions/user_sessions_steps.rb

Given /^I am already logged in$/ do 
    UserSession.create!(User.find_by_name!('user')) 
end 

Obviamente, se puede pasar un nombre de usuario en la definición paso si desea conectarse a un usuario específico.

Los detalles completos están en esta entrada del blog: http://laserlemon.com/blog/2011/05/20/make-authlogic-and-cucumber-play-nice/

+0

Terrible. Debería ir a través de la interfaz de usuario para hacer esto, al igual que debería pasar por la interfaz de usuario para prácticamente todo lo demás en las pruebas de integración; de lo contrario, no está realmente probando su aplicación. No te metas con las aplicaciones internas en tus pruebas de integración. –

+2

Cuando tiene miles de escenarios de pepino, está agregando una gran cantidad de gastos generales para obtener pocos beneficios. Sé pragmático al respecto. – PhilT

+0

No creo que sea práctico que sus pruebas de integración violen la encapsulación de lo que se supone que deben probar. Eso los hace inseguros e inútiles para su propósito previsto. Es mejor no escribir pruebas en absoluto que escribir las inexactas. –

0

Tomando prestado un truco de otra de las joyas de autenticación Sorcery 's wiki: Integration Testing with Rspec, Capybara and Fabricator, utilizan:

page.driver.post(user_sessions_url, { username: user, password: password }) 

que se pide básicamente el método user_sessions_controller#create, por lo que hacen Seguro que los args coinciden. Entonces para mí, lo hice:

activate_authlogic 
page.driver.post(user_sessions_url, { user_session: { email: user.email, password: user.password } }) 

Estuve buscando esto por unos días. y UserSession.create! no han podido trabajar para mí. Aunque esta es una vieja pregunta, estoy en Rails 4, con suerte, puede ayudar a otros a quedarse también.

Cuestiones relacionadas