【发布时间】:2011-06-02 02:13:02
【问题描述】:
对于我的范围路由,我似乎无法解决 rspec 控制器规范中的“get”方法。
我正在为我的“访问者”控制器确定路由范围,以便它们位于“访问者”模块命名空间内,但位于路由的根目录。所以 'mysite.com/foo' 转到了 Visitor::FooController。
config/routes.rb
scope :module => 'visitor' do
resources :inquiries
end
spec/controllers/visitor/inquiries_controller_spec.rb
require 'spec_helper'
describe Visitor::InquiriesController do
describe 'GET new' do
it 'should render template visitor/inquiries/new' do
get :new
end
end
end
app/controllers/visitor/inquiries_controller.rb
class Visitor::InquiriesController < Visitor::BaseController
def new
end
end
当我运行规范时,我收到以下错误。
No route matches {:controller=>"visitor/inquiries", :action=>"new"}
我尝试为 get 添加一些额外的参数(例如 :url => 'inquiries/new'、:controller => 'inquiries'),但我似乎无法解决这个问题。用我的浏览器点击“查询/新”可以正常工作,并表明我的路线按预期工作。
我是 rspec 的新手,所以这里可能存在一些我不理解的基本问题。否则,我正在寻找一种方法来解决这个问题,以便我可以测试这些“访客”控制器。任何帮助表示赞赏!
【问题讨论】:
-
这是孤立的吗?其他路线有效吗?
-
我刚刚尝试了一个“管理员”控制器的控制器规范,“get :new”工作正常。这些“管理员”控制器的不同之处在于路由的范围是“管理员”(例如“管理员/帐户”)。
-
也许
Visitor::InquiriesController应该从ApplicationController继承下来? -
也许我应该从 Visitor::BaseController 中取出这个问题的继承,因为它不应该有任何影响。只是为了确定虽然我只是尝试直接从 ApplicationController 继承并收到相同的错误消息。我为 stef 测试的管理控制器也使用类似的继承方案(从 Admin::BaseController 继承)。
-
我复制了这个配置,没有看到错误。你说它在 RSpec 之外工作,这令人费解。 Visitor::BaseController 有什么特别的功能吗?
标签: ruby-on-rails controller rspec rspec2