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

时间:2012-03-07 23:20:24

标签: ruby-on-rails rspec routes

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

我正在尝试为我的Admin :: ZonesController测试路由。我已经在浏览器和运行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

我的控制器目录如下所示:

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

我的规范/路由目录如下所示:

  • 规格/路由
    • 管理员
      • zones_routing_spec
    • hooks_routing_spec
    • services_routing_spec
    • zones_routing_spec

0 个答案:

没有答案