2009-11-19 11 views
13

Dado que tengo una ruta denominada:¿Cómo usar rspec para probar rutas con nombre?

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

¿Cómo se utiliza el enrutamiento archivo spec 'spec/enrutamiento/some_routing_spec.rb' para la prueba de que la ruta denominada?

He intentado esto después de que el bloque "describir SomeRouteController" y no funciona, lo entiendo ' 'ayudante' método no definido:

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

Respuesta

13

Si esto está en una especificación de controlador, puede llamar al método de enrutamiento directamente, no necesita ayuda.

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

Gracias, lo intenté también, solo quería escuchar a otra persona decir que no estaba loca, jeje ... Resultó que había usado recursos anidados, lo que requiere el formato parent_child_path (23) en oposición al child_path (23) formato. – btelles

+0

Las cosas cambian rápidamente en RSpec - dchelimsky sugiere usar route_to matcher: El route_to matcher especifica que una solicitud (verbo + uri) es enrutable. Es más valioso cuando se especifican rutas distintas a las rutas RESTful estándar. https://www.relishapp.com/rspec/rspec-rails/v/2-4/docs/routing-specs/route-to-matcher (vea también la respuesta de Scarver a esta pregunta) –

2

Usted puede hacer esto en las especificaciones de su controlador con el assert_routing método, así:

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 

más documentación here.

+0

Sí, eso es para el reconocimiento de ruta regular, sin embargo, estaba buscando especificaciones de rutas con nombre. ¡Gracias! – btelles

12

En RSpec-carriles 2.7+ puede crear un directorio spec/routing y poner sus especificaciones de enrutamiento en ese país. Vea el rspec-rails docs para más información.

6

hay un buen matcher la debería haber para esto también:

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

más información sobre el uso de la debería adaptadores de la rspec:

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

1

Ésta es la forma en que escribo las especificaciones utilizando RSpec2, Shoulda, y Capibara. Se podría guardar este archivo de ejemplo en # {} Rails.root /spec/routing/thingz_routing_spec.rb o mi preferencia # {} 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

Sintaxis alternativa: 'should route (: get, '/thingz').to(controller:' thingz ', acción:' index ') ' – scarver2

Cuestiones relacionadas