10

运行我的所有规格时遇到问题。

    ActiveRecord::AssociationType 不匹配:
       Affiliate(#2154746360) 预期,得到 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 加载,然后Rails.application在我的“app”方法中调用时重新定义它们。

关于如何解决这个问题的任何想法?我不确定是否有另一种方法可以在“app”方法中设置我的 Rails 应用程序。

4

2 回答 2

1

从源代码Rails.application

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

这意味着Rails.application每次都返回相同的对象。也许这就是问题所在——在同一个 Rails 应用程序上运行多个测试会与对象发生冲突。

一些教程设置测试是这样的:

def app
  Rails::Application
end

其他人则这样做:

def app
  ActionController::Dispatcher.new
end

两者都为每次调用创建新对象app

编辑:ActionController::Dispatcher.new刚刚从标记为已弃用的日志中注意到。

于 2011-05-04T07:56:22.597 回答
0

我不再有这个问题了。我更新了我的宝石。Rails 从 3.0.5 更新到 3.0.7,我猜这可能是解决我问题的 gem 更新。无论哪种方式,使用较新版本的 gem,我的问题都已解决。

于 2011-05-06T00:42:33.067 回答