2012-06-11 10 views
7

Tengo una aplicación que usa rails 3.2 y Devise. Tengo un paquete de prueba de solicitud que usa rspec y Capybara.Rails 3 con Devise y rspec: Ayudantes de prueba de Warden poco confiables

He intentado pasar al uso de los ayudantes de prueba de Warden en mi inicio de sesión en lugar de hacer que Capybara complete el formulario de inicio de sesión y enviarlo. Debido al tamaño y la complejidad de mi suite de pruebas, esto da como resultado más de un minuto y medio de ahorro en los tiempos de ejecución de la prueba.

En mi configuración es:

RSpec.configure do |config| 
    config.include Warden::Test::Helpers, :type => :request 
    config.after :each do 
    Warden.test_reset! 
    end 
end 

y en un contexto:

let!(:current_user) { FactoryGirl.create(:user) } 

background do 
    login_as(current_user, :scope => :user) 
end 

Sin embargo, cuando se ejecuta el conjunto de pruebas mediante las configuraciones casi en cada prueba tiene una especificación de petición no al azar diferente debido a la página que presenta como si el usuario no hubiera iniciado sesión. (Específicamente, enlaces controlados por un condicional user_signed_in?)

Mi questio n: ¿Alguien más ha encontrado tal falta de fiabilidad y cómo puede mitigarse?

Respuesta

1

Lo más fácil de hacer es utilizar el formulario sign_in en su bloque before :each. Necesita los ayudantes de prueba en las especificaciones del Controlador, porque está aislado del dispositivo. No tienes ese problema en una prueba de integración.

+1

Estoy de acuerdo en que es la más fácil y esa es la solución que estoy usando por ahora. Sin embargo, realmente quiero que minuto y medio corten mis exámenes. –

+0

¿Has intentado simplemente publicar el correo electrónico/contraseña en 'user_session_path'? – DVG

+0

Sí, funciona bien con selenio, pero debido a algunos problemas con selenio y firefox, estamos usando capybara-webkit, que no admite la publicación de datos en una URL directamente. –

0

Aunque una publicación anterior también tengo este problema con Rails 4.1 y Warden 1.2.3. Noté que hay una versión más nueva de Warden con trabajo en los ayudantes de prueba. ¿Alguien tiene éxito con la versión más nueva?

Por cierto, el comportamiento que observo es que Warden no siempre inicia sesión correctamente a través del login_as helper. Esto da como resultado que mi aplicación se encuentre en la página de inicio de sesión en lugar del lugar que pensó que debería ser.

+0

Estoy usando Rails 4.1.16 con Warden 1.2.6 y no tuve suerte aquí. –

Cuestiones relacionadas