即使路由存在,Rspec命名空间路由规范也会失败

我正在使用rspec-rails(2.8.1)rails 3.1.3

我正在尝试为我的Admin :: ZonesController测试路由。 我已经validation了浏览器和运行rake routes 。 我没有使用ActiveRecord(如果重要的话)。 当我运行路由规范时,它告诉我:

 ActionController::RoutingError: No route matches "/admin/zones/new" 

这是测试(spec / routing / admin / zones_routing_spec.rb):

 require 'spec_helper' describe "routing to zones" do it "routes /admin/zones/new to admin/zones#new" do { :get => "/admin/zones/new" }.should route_to( :controller => "admin/zones", :action => "new" ) end end 

这是控制器动作我试图测试的路径(admin / zones #new):

 class Admin::ZonesController < Admin::BaseController before_filter :instantiate_variables def new @zone = Zone.new @campaign = Campaign.new @rules = [Rule.new] end end 

运行rake routes给我这个:

  POST /hooks/:resource(.:format) {:controller=>"hooks", :action=>"create"} POST /services/:service/:method(.:format) {:controller=>"services", :action=>"create"} admin_zones GET /admin/zones(.:format) {:action=>"index", :controller=>"admin/zones"} POST /admin/zones(.:format) {:action=>"create", :controller=>"admin/zones"} new_admin_zone GET /admin/zones/new(.:format) {:action=>"new", :controller=>"admin/zones"} edit_admin_zone GET /admin/zones/:id/edit(.:format) {:action=>"edit", :controller=>"admin/zones"} admin_zone GET /admin/zones/:id(.:format) {:action=>"show", :controller=>"admin/zones"} PUT /admin/zones/:id(.:format) {:action=>"update", :controller=>"admin/zones"} DELETE /admin/zones/:id(.:format) {:action=>"destroy", :controller=>"admin/zones"} admin_widgets GET /admin/widgets(.:format) {:action=>"index", :controller=>"admin/widgets"} POST /admin/widgets(.:format) {:action=>"create", :controller=>"admin/widgets"} new_admin_widget GET /admin/widgets/new(.:format) {:action=>"new", :controller=>"admin/widgets"} edit_admin_widget GET /admin/widgets/:id/edit(.:format) {:action=>"edit", :controller=>"admin/widgets"} admin_widget GET /admin/widgets/:id(.:format) {:action=>"show", :controller=>"admin/widgets"} PUT /admin/widgets/:id(.:format) {:action=>"update", :controller=>"admin/widgets"} DELETE /admin/widgets/:id(.:format) {:action=>"destroy", :controller=>"admin/widgets"} zones GET /zones(.:format) {:action=>"index", :controller=>"zones"} POST /zones(.:format) {:action=>"create", :controller=>"zones"} new_zone GET /zones/new(.:format) {:action=>"new", :controller=>"zones"} edit_zone GET /zones/:id/edit(.:format) {:action=>"edit", :controller=>"zones"} zone GET /zones/:id(.:format) {:action=>"show", :controller=>"zones"} PUT /zones/:id(.:format) {:action=>"update", :controller=>"zones"} DELETE /zones/:id(.:format) {:action=>"destroy", :controller=>"zones"} root / {:controller=>"admin/zones", :action=>"new"} 

我的routes.rb看起来像这样:

 D2CModularPlatform::Application.routes.draw do post "/hooks/:resource" => "hooks#create" post "/services/:service/:method" => "services#create" namespace :admin do resources :zones resources :widgets end resources :zones root :to => "admin/zones#new" end 

我的控制器dir看起来像这样:

  • 控制器
    • 管理
      • base_controller
      • widgets_controller
      • zones_controller
    • application_controller
    • hooks_controller
    • services_controller
    • zones_controller

我的spec / routing dir看起来像这样:

  • 投机/路由
    • 管理
      • zones_routing_spec
    • hooks_routing_spec
    • services_routing_spec
    • zones_routing_spec