7
votes

Rails: Comment écrivez-vous une spécification pour un itinéraire qui fait une redirection?

J'utilise Omniauth dans mon projet Rails et j'aimerais cacher "/ auth / Facebook" derrière une route "/ Login".

En fait, j'ai écrit un itinéraire: P>

match "/login", :to => redirect("/auth/facebook"), :as => :login


3 Réponses :


0
votes

Vous devez utiliser rack :: Test et vérifier l'URL et le code d'état HTTP

get "/login"
last_response.status.should == 302
last_response.headers["Location"].should == "/auth/facebook"


0 commentaires

12
votes

Parce que vous n'avez pas fourni de détail sur votre environnement, l'exemple suivant suppose que vous utilisez RSPEC 2.x et RSPEC-rails, avec des 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


5 commentaires

Cela marche! Merci! La clé est de définir cette spécification dans # spécifications / demandes / redirections comme vous l'avez mentionnée. Auparavant, je l'avais fait dans l'application de l'applicationControlspec (qui a entraîné l'erreur que l'action "/ login" ne peut pas être trouvée dans l'applicationController) ou dans l'une des spécifications de spécification / routage avec "* .should route_to bla" (qui s'est plaint que la route n'existe pas).


Et oui, j'utilise RSPEC (-Rails) 2.x avec des rails 3.


Juste une autre note que le fichier doit être nommé Redirects_spec.rb, de sorte que la tâche de râteau par défaut le ramasse lorsque vous venez de «râler» sur la ligne de commande.


N'est-il pas une mauvaise pratique d'avoir plusieurs assertions?


Vous pouvez écrire une assertion par bloc si vous préférez. Mais dans ce cas, je crois que ça va bien.



1
votes

Vous pouvez également utiliser: xxx


0 commentaires