运行我的所有规格时,我有一个问题.
- 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时,它们被重新定义.
解决方法
从源代码为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
这两个都为每次调用应用程序创建新对象.
编辑:刚从注意到ActionController :: Dispatcher.new被标记为已弃用.