2012-08-07 66 views
4

我似乎在水豚的頁面方法和Kaminari的頁面方法之間存在某種衝突。Kaminari和水豚衝突

這就是我猜到了,反正這裏是錯誤:

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 

如果我刪除了分頁,測試工作正常。

我不明白這是怎麼可能的,我想水豚是添加「頁面」方法的對象範圍,但作爲Kaminari將其page方法添加到ActiveRecord :: Base(如果我沒記錯的話)它應該重寫水豚的一個。

我沒有看到任何人有這種麻煩,怎麼可能?

謝謝。

回答

2

這是一個黑客的一點點,但我還是能夠解決的問題(其中水豚「污染」的對象空間)民主基金-ING在我的規格方法:

# 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方法來源於水豚:: DSL
  2. 的水豚:: DSL方法納入經RSpec中的#configure.include方法的對象類(LIB /capybara/rspec.rb)。
  3. RSpec然後將它包含到'組'中,但是我相信這是它落入對象的地方。

這裏的解決方案可能只是改變水豚的方法的名字,但我想那不是一個決定,我願意做:)

+0

嗯,我終於改變雷到will_paginate,但對於見解謝謝:) – 2012-10-11 09:59:40

3

我有同樣的問題與水豚2。 x

我的功能規格在spec/feature directory。我通過閱讀Capybara文檔意識到,如果您使用功能目錄,則無需在您的spec_helper中包含Capybara::DSL。它已經包含在內。

如果您在spec_helper中發現它會污染全局名稱空間,並且這正是爲什麼它是一個壞主意,您會收到一個警告!

Check out this rspec-rails page on Capybara for details