【问题标题】:Rails 3: How to test router scope?Rails 3:如何测试路由器范围?
【发布时间】:2010-09-14 14:39:40
【问题描述】:

我使用的是 Rails 3.0,并且我的 routes.rb 文件中有以下内容:

scope "/:location" do
  resources :agents
end

所以我可以这样做:

agents = Agent.where("location = ?", params[:location])

(可能有更好的方法来做到这一点..?主要是我想要这样的 URL:myurl.com/london/agents)

无论如何,我的问题在于测试(我仍在学习),我怎样才能使它与范围一起工作:

class AgentsControllerTest < ActionController::TestCase
  test "should get index" do
    get 'index'
    assert_response :success
  end
end

它只是得到一个找不到路由的错误。

任何帮助都会很棒,谢谢。

【问题讨论】:

    标签: ruby-on-rails testing routes


    【解决方案1】:

    由于您已经确定了资源的范围,因此您实际上无法通过任何操作直接访问 agent_controller。所以调用get'index'实际上只是试图访问/agents。如果您在浏览器中尝试此操作,它也会失败。

    要获得成功,您必须像这样提供位置参数:

    get 'index', { :location => 'hawaii' }
    

    希望对您有所帮助。

    编辑:如果您想要对 agent_controller 的额外访问(意味着位置是可选的),只需在您的路由文件中为其添加顶级资源:

    resources :agents
    

    【讨论】:

    • 太好了,谢谢! (实际上我以为我已经尝试过了,但它失败了,但我一定做错了什么,因为现在一切都过去了——所以干杯)
    猜你喜欢
    • 2011-12-20
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    相关资源
    最近更新 更多