AssociationTypeMismatch和FactoryGirl

Ada*_*ski 19 ruby-on-rails cucumber ruby-on-rails-3 factory-bot

这最近引起了一些挫折......

似乎在我的黄瓜测试中使用工厂,在某些情况下会导致AssociationTypeMismatch错误,例如:

MyModel(#65776650)期待,得到MyModel(#28190030)(ActiveRecord :: AssociationTypeMismatch)

当存在关联引用时,似乎会发生这些 - 就好像Factory创建的对象与实际对象不同.有关更多详细信息,请参阅此问题:Cucumber重复类问题:AssociationTypeMismatch

我一直在逐步将Factory调用更改为真正的Model.create或mock_model调用.继续使用工厂女孩会很好......我想知道是否有什么我可能做错了?

谢谢

sta*_*er2 8

我在Rails 3.1.0 rc5上发生了这件事,并让它运行起来.

扩展乔纳斯的答案.

您应该将Gemfile更改为:

gem 'factory_girl', '~> 2.0.0', :require => false
gem 'factory_girl_rails', '~> 1.1.0', :require => false
Run Code Online (Sandbox Code Playgroud)

然后,如果您使用Spork,请使您的spec/spec_helper.rb文件如下所示:

Spork.each_run do
 require 'factory_girl'
 require 'factory_girl_rails'
end
Run Code Online (Sandbox Code Playgroud)

  • 我还必须把它放在我的Spork.each_run中(在需要之前)才能使它工作:ActiveSupport :: Dependencies.clear #Reload models (3认同)

Jon*_*sen 4

如果 ActiveSupport 卸载并重新加载您引用的常量,似乎会发生这种情况。我在 Rspec/Capybara 上也经历过同样的事情,有帮助的是不同的东西的混合:

  • 确保您的测试环境 (config/environments/test.rb) 中已将 cached_classes 设置为 false
  • 在您的 gemspec 中,尝试将 require 'factory_girl_rails' 替换为 'factory_girl'

我正在使用Spork(一个测试服务器),这似乎让这件事变得越来越困难。如果您使用的是测试服务器,请评估是否应该在 gemspec 中的factory_girl 之后放置 ', :require => false'。

该主题也包含在这个谷歌群组线程中

请告诉我们这些是否有帮助。