Test des routes nommées avec RSpec

RSpec offre deux fonctions pour tester les routes. La première vérifie la génération de l’URL, étant donnés les contrôleurs, actions, etc. :

route_for(:controller => 'sessions', :action => 'new').should == "/login"

La seconde fait la vérification inverse ; la requête active-t-elle les bons paramètres ?

params_from(:get, '/login').should == {:controller => 'sessions', :action => 'new'}

Il n’y a pas de fonction spécifique pour tester les routes nommées (par exemple login_path). Ça ne présente pas de difficulté particulière, mais il y a une astuce : les routes nommées ne sont chargées qu’après le première requête. Un exemple :

describe "named routing" do
    before(:each) do
      # If you haven't already made a get/post request through the rails integration
      # session infrastructure the named routes don't get loaded
      get :new
    end
    it "should route login_path() correctly" do
      login_path.should == "/login"
    end
  end