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.

Especificación de escritura para la acción before_filter de un controlador.

Mi controlador es algo así:

before_filter: check_login_status

def check_login_status
  send_response(:not_logged_in) unless user.logged_in?
end

Mi especificación para esto es así:

it 'returns error unless user is not logged in' do
  expect(controller).to receive(:send_response).with(:not_logged_in)
  controller.send(:check_login_status)
end

Ahora quiero escribir otra prueba como:

it 'checks the login status of user before any action' do
  .......
end

¿Cómo puedo completar la segunda prueba?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para completar la segunda prueba, puedes usar el “hook” before de RSpec para crear un usuario con sesión iniciada antes de cada prueba, y luego llamar a una acción de muestra para verificar si el usuario tiene sesión iniciada:

    describe MyController do
      before do
        @user = User.create(username: 'testuser', password: 'password')
        allow(controller).to receive(:current_user).and_return(@user)
      end
    
      it 'verifica el estado de inicio de sesión del usuario antes de cualquier acción' do
        expect(@user).to receive(:logged_in?).and_call_original
        get :index # Reemplaza con cualquier acción que desees probar
      end
    end
    

    En este ejemplo, primero creamos un objeto @user utilizando el método User.create. Luego, usamos el método allow de RSpec para simular el método current_user del controlador, de manera que siempre devuelva el objeto @user que acabamos de crear.

    En la prueba en sí, llamamos a una acción de muestra (get :index) y luego utilizamos el método expect de RSpec para establecer una expectativa de que se llamará al método logged_in? del objeto @user y que devolverá true.

    Al hacer esto, estamos probando que el método check_login_status se está llamando efectivamente antes de cada acción, y que detecta correctamente si un usuario tiene sesión iniciada o no.

Comments are closed.