【问题标题】:'get' method in Rails controller tests throwing "no route matches" for controller scoped by moduleRails 控制器测试中的“get”方法为模块范围内的控制器抛出“无路由匹配”
【发布时间】: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


【解决方案1】:

当我第二天重新启动计算机时,问题就解决了。 Spork 似乎有某种问题导致了这个问题。我不确定这个问题是否可以删除,但它可能不会为 Stackoverflow 提供很多价值。

【讨论】:

    【解决方案2】:

    看看你的 config/routes.rb 取消注释后续行:匹配 ':controller(/:action(/:id(.:format)))' 现在应该可以了

    【讨论】:

    • 不要这样做。它将所有控制器操作公开给不受 CSRF 保护的 GET 请求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多