在嵌套路线的Rspec测试中找不到操作

时间:2014-05-07 15:10:04

标签: ruby-on-rails rspec routes

我试图了解嵌套路由如何与Rspec一起使用。我有其中一个:

class SupportController < ResourceController
   # stuff happens

   def support_override
      customer = Customer.find_by_id(params[:id])
      customer.override( params[:override_key] )
      redirect_to("support")
   end
 end

我们有一条路线:

resources :support do 
  member do
    # loads of paths

    get  'support_override/:override_key' => 'support#support_override' 
  end
end       

路线通过测试:

it "should route GET support/1/support_override/ABCDEF to suport#support_override" do
  { get: '/support/1/support_override/ABCDEF'}.should route_to(controller: 'support', action: 'support_override', id: '1', override_key: 'ABCDEF' )
  end

但是当我尝试在rspec中测试逻辑时:

describe SupportController do
   # various levels of context and FactoryGirl calls

   it "can reach override url" do
     get :support_override, { :id=> @customer.id, :override_key="123" }
     response.should redirect_to("support")
     end

end

我收到以下回复:

  

失败/错误:无法从回溯中找到匹配的行       一个AbstractController :: ActionNotFound:         无法找到SupportController

的操作'support_override'

我毫不怀疑问题在于我对rspec如何与嵌套路由一起工作的理解,但我看不出有什么方法可以找出Rspec实际寻求的路径,因此我很难知道我需要改变什么而且我无法找到相关文档。

有没有办法找到测试创建的路径,或者有人可以提供有关在这种情况下路径创建的准确程度的指导吗?

1 个答案:

答案 0 :(得分:2)

由于您还没有共享完整的SupportController代码,因此我无法确定错误。但有两种可能性:

  1. 您错误地在support_override / private下定义了protected
  2. 您错误地在SupportController方法定义之前关闭了课程support_override
  3. 您的操作必须始终为public,以便可以访问。