【问题标题】:Action could not be found in Rspec test for nested route在嵌套路由的 Rspec 测试中找不到操作
【发布时间】:2014-05-07 15:10:04
【问题描述】:

我正在尝试了解嵌套路由如何与 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 实际寻求的路径,因此很难知道我需要更改什么而且我无法找到相关文档。

有没有办法找到测试正在创建什么路径,或者任何人都可以提供有关在这种情况下路径创建如何工作的指导?

【问题讨论】:

    标签: ruby-on-rails rspec routes


    【解决方案1】:

    由于您尚未分享完整的SupportController 代码,因此我无法确定确切的错误。但是有两种可能:

    1. 您错误地在private/protected 下定义了support_override
    2. 你错误地在support_override方法定义之前关闭了类SupportController

    您的操作必须始终为public,以便其可访问。

    【讨论】:

    • 你真是个天才,在班级的protected 区域。
    • 因此ActionNotFound 错误表明它已到达正确的控制器但未找到操作。我想我可能应该正确阅读我的错误消息。
    • 是的。这就是它的意思。您的操作必须始终为public,以便其可访问。很高兴帮助:)
    猜你喜欢
    • 2013-07-13
    • 2011-08-21
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多