2011-08-28 13 views
7
ruta

problema bastante sencillo (que tendría pensamiento), pero estoy teniendo algunos problemas:rieles RSpec enrutamiento: Prueba de acciones en: excepto que no

En Rails 3.1.0.rc6/RSpec 2.6.0 , estoy tratando de probar el enrutamiento de los recursos de mi 'productos', enrutan como esto:

resources :products, :except => [:edit, :update] 

el enrutamiento para las acciones válidas funciona, pero quiero asegurar que las rutas de editar y actualizar no son invocable Esto es lo que estoy tratando:

it "does not route to #edit" do 
    lambda { get("/products/1/edit") }.should raise_error 
end 

Failure/Error: lambda { get("/products/1/edit") }.should raise_error expected Exception but nothing was raised # ./spec/routing/products_routing_spec.rb:11:in `block (3 levels) in '

... Y, sin embargo, cuando corro

it "does not route to #edit" do 
    get("/products/1/edit").should_not route_to("products#edit", :id => "1") 
end 

consigo

Failure/Error: get("/products/1/edit").should_not route_to("products#edit", :id => "1") ActionController::RoutingError: No route matches "/products/1/edit"

Alguna idea de lo que está pasando aquí? Supongo que esto debería ser bastante simple, pero parece que no puedo resolverlo.

Respuesta

9

No sé por qué fallaría el lambda, pero no creo que el rspec-rails dsl esté destinado a ser usado así. ¿Has intentado algo como ésto?

{ :get => "/products/1/edit" }.should_not be_routable 

http://relishapp.com/rspec/rspec-rails/docs/routing-specs/be-routable-matcher

Así que no se puede especificar lo que no encamina a, pero se puede especificar que no quede enrutado.

+0

Tenemos un ganador. Extraño - Creo que Rails 2 solía manejar lambdas "elevar error", pero claramente no 3.1. Ni siquiera estaba al tanto del método be_routable, muchas gracias. – PlankTon

+1

¡Muy útil! Solo una nota rápida: la prueba anterior DEBE estar en /spec/routing/xxxx.rb o fallará con un error. No puede, por ejemplo, tener esto en /spec/requests/xxxx.rb –

0

¿Tiene una ruta alternativa? Porque eso explicaría por qué no se produce ningún error, pero de hecho, intentar evaluar route_to("products#edit", :id => 1) aumentaría, porque la ruta no existe.

+0

Bonito pensamiento, pero no. Este es un proyecto simple, literalmente comenzó esta tarde. No se han configurado redireccionamientos, por el momento solo se trata de recursos desnudos, andamios y pepinos sin andamios. – PlankTon