Ruby 卡米纳里和水豚冲突

Ruby 卡米纳里和水豚冲突,ruby,ruby-on-rails-3,rspec,capybara,kaminari,Ruby,Ruby On Rails 3,Rspec,Capybara,Kaminari,我似乎在水豚的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

我似乎在水豚的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
类提要
def MicroPost(选项={紧急:错误})
紧急=选择[:紧急]
p.其中(id:1).第#页
p.其中(id:1).第(1)页#错误
结束
结束
如果删除分页,测试工作正常

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

我没有看到任何人有这种麻烦,怎么可能


谢谢。

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

# 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
我追溯到了发生这种情况的地方,基本上:

  • #page方法来自Capybara::DSL
  • 通过RSpec的#configure.include方法(参见lib/Capybara/RSpec.rb),Capybara::DSL方法被包含到对象类中
  • RSpec然后将其包括在“组”中,但我相信这就是它落入对象的地方

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

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

    我的功能规格位于
    spec/feature目录中
    。通过阅读Capybara文档,我意识到,如果您使用features目录,则无需将
    Capybara::DSL
    包含在
    spec\u helper
    中。已经包括在内了

    如果
    spec\u helper
    中包含Capybara::DSL
    ,则会发出警告,它将污染全局名称空间,这正是一个坏主意的原因


    我终于把卡米纳里换成了威尔·帕吉纳特,但谢谢你的见解:)