2011-09-12 10 views
7

En las pruebas de integración de Rails, ¿cómo configuro una variable de sesión (: user_id en mi caso)?Cómo establecer las variables de sesión en las pruebas de integración de Rails

Obviamente no es una prueba de integración completa, pero dado que en mi aplicación la autenticación del usuario no puede ocurrir sin la interacción manual del usuario, ¿puedo trabajar y tener una variable de sesión configurada manualmente?

Han intentado lo siguiente: "session" no está disponible en ese ámbito, open_session devuelve una sesión que no he encontrado una manera de actualizar.

Respuesta

1

¿Por qué la autenticación no puede realizarse sin interacción manual? ¿Utiliza un CAPTCHA? Si es así, corta esa parte para que se ejecute en un entorno de prueba.

+0

Es contra twitter o facebook. – jbasko

+0

¿Esto ayuda? http://stackoverflow.com/questions/5331045/testing-a-web-applications-facebook-integration-with-cucumber –

5

Por lo que yo sé, no se puede. El valor de la sesión en las pruebas de integración (en los carriles 3.2.2) es una copia. (Dioses del riel: Corrígeme si estoy equivocado al ). Puede establecer el valor, pero no afectará el próximo get/post porque es una copia local de la sesión real. Ideal para pruebas afirmativas, no es tan bueno para mantener el estado en sesión durante la prueba de integración.

Tengo un controlador de prueba para admitir mis pruebas de JavaScript a través de Evergreen.

Mi solución fue agregar un método a mi controlador de prueba y una ruta disponible cuando NO estoy en producción, eso me permite establecer valores de sesión.

Básicamente mi método # set_session app_test las pantallas de los nombres de los parámetros para un prefijo, si el prefijo es encontrado, entonces el valor de sesión para el prefijo de nombre de parámetro se establece despojado. Algo así como:

params.each() do |key, value| 
      next if (key !~ /^set_session_/) 
      session[ key.slice(("set_session_".size())..-1).to_sym ] = value 
    end 
    # don't forget to render something/anything 

Por lo tanto, para establecer las variables de sesión durante mis pruebas de integración, tengo una pequeña trozo de código como:

prefix = "set_session_" 
    post("/set_session.html", { (prefix + "user_id") => "My Name Is Mudd" }) 

No es tan bonita como "período de sesiones [: user_id] = ' My Name Is Mudd '", pero funciona. Mi próxima publicación/obtención verá la sesión [: user_id] establecida con el valor deseado.

Esto se extiende fácilmente para pasar enteros, símbolos, etc., y por supuesto, pares clave/valor de sesión múltiple se pueden establecer a la vez. No es bonito, pero no está mal.

Cuestiones relacionadas