Enrutamiento RSpec de rieles: acciones de prueba en: excepto NO enrutar

Problema bastante simple (habría pensado), pero tengo algunos problemas:

En Rails 3.1.0.rc6 / RSpec 2.6.0, estoy tratando de probar el enrutamiento de mi recurso de 'productos', enrutado así:

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

El enrutamiento para las acciones válidas funciona, pero quiero asegurarme de que las rutas de edición y actualización no son invocable. Esto es lo que estoy intentando:

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

Fallo / Error: lambda {get ("/ products / 1 / edit")} .should raise_error esperaba Excepción pero no se generó nada # ./spec/routing/products_routing_spec.rb:11:in `block (3 niveles) 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

yo obtengo

Fallo / Error: get ("/ productos / 1 / edit"). Should_not route_to ("productos # editar",: id => "1") ActionController :: RoutingError: No hay ruta coincide con "/ productos / 1 / edit"

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

preguntado el 28 de agosto de 11 a las 05:08

2 Respuestas

No sé por qué fallaría el lambda, pero no creo que el rspec-rails dsl esté destinado a usarse 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

Por lo tanto, no puede especificar a qué no se enruta, pero puede especificar que no se enruta.

Respondido 28 ago 11, 18:08

Tenemos un ganador. Extraño: creo que Rails 2 solía manejar lambdas de "error de subida", pero claramente no 3.1. Ni siquiera estaba al tanto del método be_routable, muchas gracias. - Plancton

¡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 - Dave Collins

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

Respondido 28 ago 11, 11:08

Buen 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 andamios desnudos intactos, rspec y pepino. - Plancton

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.