运行我的所有规格时遇到问题。
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
我的机架规格不起作用,但我的所有其他规格都可以正常工作。在“app”方法中使用Rails.application
会引入上述错误。
如果我单独运行我的规格,一切正常。我正在使用Spork预加载我的环境,我认为模型首先由Spork加载,然后在我的“app”方法中调用Rails.application
时重新定义它们。
有关如何解决此问题的任何想法?我不确定是否有另一种方法可以在“app”方法中设置我的Rails应用程序。
答案 0 :(得分: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
被标记为已弃用。
答案 1 :(得分:0)
我不再有这个问题了。我更新了我的宝石。 Rails从3.0.5更新到3.0.7,我猜可能是修复我的问题的gem更新。无论哪种方式使用更新版本的宝石,我的问题都是固定的。