Para mí, fue una combinación de los comentarios de casi todo el mundo implicado hasta ahora.
En primer lugar, empecé con esta sencilla prueba:
it "routes/to the widgets controller" do
get('/').should route_to("mozoo/widget#index")
end
Esto dio lugar a:
Failures:
1) Mozoo::WidgetController GET widget index routes/to the widgets controller
Failure/Error: get('/').should route_to("mozoo/widget#index")
ActionController::RoutingError:
No route matches {:controller=>"mozoo/widget", :action=>"/"}
# ./spec/controllers/mozoo/widget_controller_spec.rb:9:in `block (3 levels) in <module:Mozoo>'
así que cambié get('/')
-{ :get => '/' }
y cosas empecé a trabajar muy bien. No estoy seguro por qué. De acuerdo con lib/rspec/rails/matchers/routing_matchers.rb L102-105, no hay diferencia, pero hace una diferencia para mí. De todos modos, gracias @ cameron-papa.
A continuación, añadió otra prueba muy simple y muy similar a la anterior:
it "routes root_path to the widgets controller" do
{ :get => root_path }.should route_to("mozoo/widget#index")
end
y fue conseguir este error:
Failures:
1) Mozoo::WidgetController GET widget index routes root_path to the widgets controller
Failure/Error: { :get => '/mozoo' }.should route_to("mozoo/widget#index")
No route matches "/mozoo"
# ./spec/controllers/mozoo/widget_controller_spec.rb:14:in `block (3 levels) in <module:Mozoo>'
por lo que añade esto:
before(:each) { @routes = Mozoo::Engine.routes }
Y obtuve un error mejor/diferente:
Failures:
1) Mozoo::WidgetController GET widget index routes root_path to the widgets controller
Failure/Error: { :get => root_path }.should route_to("mozoo/widget#index")
The recognized options <{"controller"=>"mozoo/widget", "action"=>"index", "section"=>"mozoo"}> did not match <{"controller"=>"mozoo/widget", "action"=>"index"}>, difference: <{"section"=>"mozoo"}>.
<{"controller"=>"mozoo/widget", "action"=>"index"}> expected but was
<{"controller"=>"mozoo/widget", "action"=>"index", "section"=>"mozoo"}>.
# ./spec/controllers/mozoo/widget_controller_spec.rb:14:in `block (3 levels) in <module:Mozoo>'
A partir de ahí, he cambiado de prueba para incluir la sección (el espacio de nombres mi motor es bajo):
{ :get => root_path }.should route_to(:controller => "mozoo/widget", :action => "index", :section => "mozoo")
y Viola, pasó. Gracias @ steven-anderson.
La siguiente parte es impar. Después de añadir otra prueba para un widget específico que utiliza el ayudante widget_path url para una ruta denominada:
it "will successfully serve the widget show page" do
visit widget_path(:foobar)
response.should be_success
end
La prueba blowd rápidamente arriba en mí con:
Failures:
1) GET bubble_summary_row widget will have the content section properly scoped
Failure/Error: visit widget_path(:bubble_summary_row)
NoMethodError:
undefined method `widget_path' for #<RSpec::Core::ExampleGroup::Nested_3:0x0000010748f618>
# ./spec/views/mozoo/widgets/show.html.haml_spec.rb:7:in `block (2 levels) in <module:Mozoo>'
por lo que añade la entrada siguiente configuración spec_helper :
RSpec.configure do |config|
config.include Testy::Engine.routes.url_helpers
end
Y BAM! Pasó. Gracias @ sam-soffes. Lo que hace que esto sea extraño es que más adelante, al crear este comentario, eliminé esa entrada de configuración para intentar recuperar el error y no pude reproducir el error simplemente eliminando la entrada de configuración. Oh, bueno, me estoy moviendo. Afortunadamente, esta larga cuenta ayuda a alguien.
ve usted la ruta cuando se ejecuta rutas rastrillo? –
¿Tiene usted requiere 'spec_helper' en index_routing_spec.rb? – squarism
rutas de rastrillo no funciona en los motores de rieles 3.1.Tal vez sea un error pero se explica aquí: http://stackoverflow.com/questions/7431687/listing-rake-routes-for-a-mountable-rails-3-1-engine –