Rieles: ¿Cómo escribo una especificación para una ruta que hace una redirección?
-
12-10-2019 - |
Pregunta
Estoy utilizando OmniAuth en mi proyecto Rails, y me gustaría ocultar "/ auth / facebook" detrás de una ruta "/ login".
De hecho, me escribió una ruta:
match "/login", :to => redirect("/auth/facebook"), :as => :login
y esto realmente funciona, es decir, un enlace a login_path
redirigirá a /auth/facebook
.
Sin embargo, ¿cómo puedo escribir una especificación (RSpec) para poner a prueba esta ruta (en concreto, la redirección)?
Ten en cuenta que /login
no es una acción real ni método definido en la aplicación.
Gracias de antemano!
Solución
Debido a que usted no proporcionó ningún detalle sobre su entorno, el siguiente ejemplo supone que está utilizando 2.x rspec y rspec-carriles, con Rails 3.
# rspec/requests/redirects_spec.rb
describe "Redirects" do
describe "GET login" do
before(:each) do
get "/login"
end
it "redirects to /auth/facebook" do
response.code.should == "302"
response.location.should == "/auth/facebook"
end
end
end
Leer la sección Especificaciones Solicitud de rspec-carriles para más detalles.
Otros consejos
También puede usar:
get "/login"
response.should redirect_to(path)
rack :: Prueba y comprobar el URL y el código de estado HTTP
get "/login"
last_response.status.should == 302
last_response.headers["Location"].should == "/auth/facebook"