即使路由存在,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
- 管理