Ruby 卡米纳里和水豚冲突
我似乎在水豚的page方法和Kaminari的page方法之间存在某种冲突 这就是我猜测的,不管怎样,这里是错误: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
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
我追溯到了发生这种情况的地方,基本上:
这里的解决方案可能只是在Capybara中更改方法的名称,但我想这不是我愿意做出的决定:)我在Capybara 2.x中遇到了同样的问题 我的功能规格位于
spec/feature目录中
。通过阅读Capybara文档,我意识到,如果您使用features目录,则无需将Capybara::DSL
包含在spec\u helper
中。已经包括在内了
如果在spec\u helper
中包含Capybara::DSL
,则会发出警告,它将污染全局名称空间,这正是一个坏主意的原因
我终于把卡米纳里换成了威尔·帕吉纳特,但谢谢你的见解:)