【问题标题】:Kaminari and Capybara conflictKaminari 和 Capybara 冲突
【发布时间】:2012-08-04 15:05:17
【问题描述】:

我觉得capybara的page方法和Kaminari的page方法有些冲突。

这就是我的猜测,无论如何,这是错误:

Failure/Error: before { sign_in_as user }
     ActionView::Template::Error:
       wrong number of arguments (1 for 0)
     # ./app/models/feed.rb:9:in `microposts'
     [Rest of the backtrace]

代码示例:

class Feed
    def microposts(opts = { urgent: false })                                                                
      urgent = opts[:urgent]                                                                                
      p Microposts.where(id: 1).page # <Capybara::Session>                                                                         
      p Microposts.where(id: 1).page(1) # Error
    end
end

如果我删除分页,测试工作正常。

我不明白这怎么可能,我猜 Capybara 正在将“page”方法添加到 Object 范围,但是随着 Kaminari 将其 page 方法添加到 ActiveRecord::Base (如果我没记错的话)它应该覆盖 Capybara 的。

我没有看到有人遇到这种麻烦,怎么可能?

谢谢。

【问题讨论】:

    标签: ruby ruby-on-rails-3 rspec capybara kaminari


    【解决方案1】:

    这有点小题大做,但我能够通过在我的规范中取消定义方法来解决问题(水豚“污染”对象空间):

    # Capybara adds a 'page' method to the Object class which conflicts with the Kaminari scope
    # Remove it here to allow things to work
    Object.send :undef_method, :page
    

    我已经追溯了发生这种情况的地方,基本上是:

    1. #page 方法来自 Capybara::DSL
    2. Capybara::DSL 方法通过 RSpec 的 #configure.include 方法包含在 Object 类中(参见 lib/capybara/rspec.rb)。
    3. RSpec 然后将其包含到“组”中,但我相信这是它放入 Object 的位置。

    这里的解决方案可能只是在 Capybara 中更改方法的名称,但我想这不是我愿意做出的决定:)

    【讨论】:

    • 好吧,我终于将 Kaminari 更改为 will_paginate,但感谢您的见解 :)
    【解决方案2】:

    我在 Capybara 2.x 上遇到了同样的问题

    我的功能规格在spec/feature directory 中。我通过阅读 Capybara 文档意识到,如果您使用 features 目录,则无需在您的 spec_helper 中包含 Capybara::DSL。它已经包含在内。

    如果你在spec_helperinclude Capybara::DSL 会给出一个警告,它会污染全局命名空间,这就是为什么这是一个坏主意!

    Check out this rspec-rails page on Capybara for details

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-01
      • 2019-08-27
      • 2012-09-10
      • 2012-08-24
      • 2021-03-06
      • 2015-04-06
      • 2012-04-07
      相关资源
      最近更新 更多