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?
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:En este ejemplo, primero creamos un objeto
@user
utilizando el métodoUser.create
. Luego, usamos el métodoallow
de RSpec para simular el métodocurrent_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étodoexpect
de RSpec para establecer una expectativa de que se llamará al métodologged_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.