2011-04-01 85 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

相关问题