es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Establecer el contexto al iniciar sesión del usuario para establecer los valores de la sesión.

El siguiente método test_helper, dado Devise como el método de autenticación,

def sign_in_with_section_id_as(user)
  post user_session_url, params: { user_id: user.id, selected_section: 31 }
end

no establece el contexto para una prueba donde se necesita procesar el valor de session[:selected_section], utilizando la técnica sugerida aquí. Sin embargo, cuando se ejecuta,

sign_in_with_section_id_as(roleshopuser.user)
puts session[:selected_section]

ese contexto devuelve nil para el valor de la sesión.

¿Cómo se puede lograr esto, posiblemente utilizando los métodos de integración de ActionDispatch relacionados con las sesiones aquí?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para establecer el contexto de una prueba donde se necesita procesar el valor session[:selected_section], puedes utilizar el método open_session de ActionDispatch::Integration::Runner. Este método abre una nueva sesión y devuelve una instancia de ActionDispatch::Integration::Session que se puede utilizar para hacer solicitudes en el contexto de esa sesión.

    Aquí tienes un ejemplo de cómo modificar sign_in_with_section_id_as para establecer el valor session[:selected_section]:

    def sign_in_with_section_id_as(user, section_id)
      open_session do |sess|
        sess.post user_session_url, params: { user_id: user.id, selected_section: section_id }
        sess.follow_redirects!  # necesario para procesar correctamente la cookie de sesión
        yield sess if block_given?
      end
    end
    

    Esta versión del método abre una nueva sesión utilizando open_session y realiza la solicitud de inicio de sesión dentro del contexto de esa sesión. También toma un argumento adicional section_id, que se utiliza para establecer el valor selected_section en los parámetros de la solicitud. Por último, cede la sesión a un bloque si se proporciona uno, para poder añadir solicitudes adicionales dentro de la misma sesión.

    Aquí tienes un ejemplo de cómo utilizar el método modificado:

    test "procesando el valor de la sesión" do
      sign_in_with_section_id_as(roleshopuser.user, 31) do |sess|
        assert_equal 31, sess.session[:selected_section]
      end
    end
    

    Esta prueba utiliza el método modificado sign_in_with_section_id_as para iniciar sesión con un valor selected_section de 31, y luego verifica que el valor de la sesión se establece correctamente en 31 dentro de la instancia de sesión cedida.

Comments are closed.