2009-11-19 6 views
13

Étant donné que j'ai une route nommée:Comment utiliser rspec pour tester les routes nommées?

map.some_route '/some_routes/:id', :controller => 'some', :action => 'other' 

Comment puis-je utiliser le fichier spec routage « spec/routage/some_routing_spec.rb » pour tester cette route nommée?

J'ai essayé ceci après la « décrire SomeRouteController » bloc et ça ne marche pas, je reçois « méthode non définie « aide »:

describe SomeRouteHelper, 'some routes named routes' do 
    it 'should recognize some_route' do 
    helper.some_route_path(23).should == '/some_routes/23' 
    end 
end 

Répondre

13

S'il s'agit d'une spécification de contrôleur, vous pouvez appeler la méthode de routage directement, sans besoin d'assistance.

describe SomeController do 
    it 'should recognize ma routes!' do 
    thing_path(23).should == '/things/23' 
    end 
end 
+1

Merci, j'ai essayé cela aussi, je voulais juste entendre quelqu'un d'autre dire que je n'étais pas fou, hehe ... Il s'avère que j'avais utilisé des ressources imbriquées, ce qui nécessite le format parent_child_path (23) par rapport au child_path (23) format. – btelles

+0

Les choses changent vite dans RSpec - dchelimsky suggère d'utiliser la route_to matcher: La route_to matcher spécifie qu'une requête (verbe + uri) est routable. Il est particulièrement utile lorsque vous spécifiez des routes autres que les routes RESTful standard. https://www.relishapp.com/rspec/rspec-rails/v/2-4/docs/routing-specs/route-to-matcher (voir aussi la réponse de Scarver à cette question) –

2

Vous pouvez le faire dans les spécifications de votre contrôleur avec le assert_routing méthode, comme ceci:

describe UsersController do 
    it "should recognize a specific users#show route" do 
    assert_routing("https://stackoverflow.com/users/23", {:controller => "users", :action => "show", :id => 23}) 
    end 
end 

Plus de documentation est here.

+0

Eh oui, C'est pour la reconnaissance de route régulière, je cherchais des spécifications d'itinéraire nommé cependant. Merci quand même! – btelles

12

Dans RSpec-Rails 2.7+ vous pouvez créer un répertoire spec/routing et mettre vos spécifications de routage là-dedans. Voir le rspec-rails docs pour plus d'informations.

6

il y a un matcher Shoulda agréable pour cela aussi:

it { should route(:get, "https://stackoverflow.com/users/23").to(:action => "show", :id => 23) 

plus d'informations sur l'utilisation Matchers Shoulda avec rspec:

https://github.com/thoughtbot/shoulda-matchers

1

Voilà comment j'écrire les spécifications en utilisant RSpec2, Shoulda, et Capybara. Vous enregistrez ce fichier exemple dans # {} Rails.root /spec/routing/thingz_routing_spec.rb ou ma préférence # {} Rails.root /spec/routing/thingz_controller_spec.rb

require "spec_helper" 

describe ThingzController do 
    describe "routing" do 
    it "routes to #index" do 
     get("/thingz").should route_to("thingz#index") 
    end 
    end 
end 
+0

Autre syntaxe: 'devrait route (: get, '/thingz').to(controller:' thingz ', action:' index ') ' – scarver2

Questions connexes