【问题标题】:Filterrific form fails in rspec test过滤形式在 rspec 测试中失败
【发布时间】:2018-01-29 22:07:15
【问题描述】:

在 rspec 中使用 Filterrific 表单测试视图失败并出现以下错误:

1) members/index renders a list of members
 Failure/Error: <%= form_for_filterrific @filterrific do |f| %>

 ActionView::Template::Error:
   No route matches {:action=>"index", :controller=>"test"}
 # /home/spfolly/.rvm/gems/ruby-2.3.0/gems/filterrific-5.0.1/lib/filterrific/action_view_extension.rb:19:in `form_for_filterrific'
 # ./app/views/members/index.html.erb:20:in `_app_views_members_index_html_erb__4554187109976153340_52575240'
 # ./spec/views/members/index.html.erb_spec.rb:42:in `block (2 levels) in <top (required)>'
 # ------------------
 # --- Caused by: ---
 # ActionController::UrlGenerationError:
 #   No route matches {:action=>"index", :controller=>"test"}
 #   /home/spfolly/.rvm/gems/ruby-2.3.0/gems/filterrific-5.0.1/lib/filterrific/action_view_extension.rb:19:in `form_for_filterrific'

控制器名称“测试”是 rspec 的怪癖吗?我是否需要仅用于 Filterrific rspec 测试的“测试”路线?

我该如何解决这个错误?

【问题讨论】:

    标签: ruby-on-rails rspec filterrific


    【解决方案1】:

    解决了。 https://github.com/jhund/filterrific/issues/159

    "在遇到同样的问题后,发现可以通过在 ActionView::TestCase::TestController 上存根 controller_name 方法来解决。

    为什么: Rspec 使用 ActionView::TestCase::TestController 作为所有视图测试的通用控制器,因此上面报告了 :controller=>"test" 。 (注意:Rspec 确实考虑了命名空间。例如,如果您的视图位于“admin”命名空间下,那么错误将显示没有路由匹配 :controller=>“admin/test”。)Filterrific 只是使用控制器的名称调用 controller.controller_name(参见https://github.com/jhund/filterrific/blob/master/lib/filterrific/action_view_extension.rb#L20)。所以在 Rspec 视图测试中,它将控制器名称设置为“test”。为了让您的测试通过,您可以存根 controller_name 以返回不同的值。

    示例: 这是我如何设置 Rspec 视图测试的完整示例。解决此问题中描述的问题只需要第一行,但我想我会包括其余部分,因为网上似乎没有太多关于测试使用 Filterrific 的代码的信息。

    before(:each) do
      allow_any_instance_of(ActionView::TestCase::TestController).to receive(:controller_name).and_return('members') # CUSTOMIZE THIS; Fixes the "No route matches" problem
      @filterrific = Filterrific::ParamSet.new(User, {})
      @filterrific.select_options = {
        filter_role: User.filter_role_options,
        filter_status: User.filter_status_options,
      }
      @users = [ build_stubbed(:user) ]
    end
    

    【讨论】:

      猜你喜欢
      • 2015-07-08
      • 2023-03-03
      • 2018-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多