2010-08-12 13 views
7

Me gustaría tener una función de pepino probando la funcionalidad memorable de idear (una cookie de recordarme).¿Cómo puedo usar Cucumber para probar la funcionalidad Rememberable de Devise?

Es fácil marcar la casilla de verificación recordarme usando capibara, pero ¿cómo debo simular que un usuario regrese al sitio después de cerrar la ventana?

+0

¿Por qué quieres que cuando legado sí lo hará, aparte de allí las pruebas? –

+1

Porque creo que es importante asegurarse de que estoy probando esta característica en el nivel de integración, es decir, ¿la estoy usando correctamente ?, ¿está funcionando correctamente ?, y ¿pueden mis clientes ver que está funcionando correctamente en base a pepino? ¿prueba de aceptacion?. – srboisvert

Respuesta

1

Se me ocurrió el siguiente hack de prueba en bastidor, y el uso de apio de selenio ligeramente más limpio, para probar la funcionalidad de recordarme de Devise en pepino/capibara. Simplemente le dice al controlador que borre manualmente la cookie de sesión. No todos los controladores son compatibles, solamente he implementado los dos que he utilizado:

http://gist.github.com/484787

Esto supone el almacenamiento de cookies de la sesión. Elimine la etiqueta @announce del escenario para eliminar la verbosidad.

Otra opción, sugerida por Matt Wynne en the mailing list discussion, puede estar buscando en otras tiendas de galletas, y su eliminación mediante consulta o eliminación de archivos:

levantado de libro carriles ágiles:

config.action_controller.session_store = CGI::Session::PStore (or just :p_store) 
config.action_controller.session_options[:tmpdir] = "/Users/dave/tmp" 
config.action_controller.session_options[:prefix] = "myapp_session_" 

o

rake db:sessions:create 
config.action_controller.session_store = :active_record_store 

Rails también tiene un método de reinicio de la sesión, pero creo que no tenemos acceso a esto porque no podemos conectarnos a la sesión de raíles cuando probamos con carpincho.

Espero que esto ayude,

Nick GIST

0

Usé email-spec para lograr esto. Mi Escenario tiene el siguiente aspecto:

@allow-rescue 
Scenario: Create New Account (Everything cool) 
Given I am not authenticated 
When I go to register 
And I fill in "Name" with "bill" 
And I fill in "Email" with "[email protected]" 
And I fill in "Password" with "please" 
And I fill in "Password Confirmation" with "please" 
And I press "Sign up" 
Then "[email protected]" should receive an email 
And I open the email 
And I should see "Confirm my account" in the email body 
When I follow "Confirm my account" in the email 
Then I should see "Your account was successfully confirmed. You are now signed in." 

Nota del @ permitir rescate decoración encima del escenario que es necesario cuando se utiliza inventar.

Espero que esto ayude.

+0

Eso es práctico, especialmente las especificaciones de correo electrónico; sin embargo, quería saber cómo probar la funcionalidad memorable de Devise: esa es la capacidad de almacenamiento de cookies para que los usuarios no tengan que iniciar sesión constantemente cada vez que visitan el sitio. – srboisvert

0

Creo que se puede cerrar la sesión con el capibara, y luego volver a entrar algo así como

Given I am on the login screen 
And I select 'Remember Me' 
And I click 'login' 
Then I should be 'logged in' 
When I click 'log out' 
Then I should be 'logged out' #=> potentially destroy a session here? 
When I click log in 
Then I should be logged in 
And I should not be directed to the login form. 

estado actual de cookies Este debe uso de cabybara para modelar este flujo.

1

de nruth fue muy útil, pero me sentí como borrar la cookie por su nombre estaba engañando. Creé un paso que elimina las cookies que un navegador eliminaría cuando se cerró y se reinició (cualquier cookie sin una fecha de caducidad establecida y establecida en el futuro).

Puedes verlo en this commit (aunque solo lo he hecho para el controlador RackTest porque no tengo la configuración de Selenium). También puede ver mi función de inicio de sesión/remember_me en this commit. Y rediseñé las clases para separar los archivos en this commit.

Espero que sea útil.

0

Se puede utilizar para este show_me_the_cookies como se muestra a continuación:

And(/^I leave the site$/) do 
    expire_cookies 
end 
Cuestiones relacionadas