2011-04-01 112 views
10

運行我的所有規格時出現問題。Rack ::測試導致ActiveRecord :: AssociationTypeMismatch

 
    ActiveRecord::AssociationTypeMismatch: 
     Affiliate(#2154746360) expected, got Affiliate(#2199508660) 

這似乎是我的模型被加載兩次。

我已經隔離了用Rack :: Test的要求來定義一個「app」方法的問題。

require 'rack/test' 
include Rack::Test::Methods 

# app method is needed for rack-test 
def app 
    Rails.application 
end 

如果我註釋掉Rails.application我機架規格不工作,但我所有的其他規格的正常工作。在「應用」方法中使用Rails.application會引入上述錯誤。

如果我單獨運行我的規格,一切正常。我正在用Spork預加載我的環境,我認爲這些模型先由Spork加載,然後在我的「應用程序」方法中調用Rails.application時重新定義它們。

關於如何解決此問題的任何想法?我不確定是否有另一種方法來在「應用程序」方法中設置我的Rails應用程序。

+0

我們已經遇到了完全相同的問題,並且在確定這個問題時相當不成功。你有沒有運氣? – 2011-04-29 13:32:34

+0

好像在這個問題上的factory_girl Google Group上有一些操作:http://groups.google.com/group/factory_girl/browse_thread/thread/daa24556d90c31fc – 2011-04-29 17:06:15

+0

邁克爾,到目前爲止我還沒有任何運氣。我剛剛避免使用我的其他規格運行違規規格。這是一個痛苦。 – 2011-05-04 00:40:36

回答

0

我不再有這個問題了。我更新了我的寶石。 Rails從3.0.5更新到3.0.7,我想這可能是解決我的問題的寶石更新。無論哪種方式與更新版本的寶石,我的問題是固定的。

1

從源代碼Rails.application

# File railties/lib/rails.rb, line 34 
def application 
    @@application ||= nil 
end 

這意味着Rails.application返回每次相同的對象。也許這就是問題 - 在同一個Rails應用程序上運行多個測試與對象衝突。

Some tutorials一套測試像這樣:

def app 
    Rails::Application 
end 

others做這樣的:

def app 
    ActionController::Dispatcher.new 
end 

這兩者爲每次調用創建於app新對象。

編輯:從日誌中注意到ActionController::Dispatcher.new被標記爲已棄用。

+0

謝謝,但更新我的寶石後,似乎已經排序出來。 – 2011-05-06 00:35:06

相關問題