我在运行规范时遇到一个非常奇怪的错误:
Failure/Error: entity = Factory.create(:entity, :name => "Test Entity", :creator => user)
ActiveRecord::AssociationTypeMismatch:
::User(#97318850) expected, got User(#92770800)
这是导致上述错误的代码。工厂是一个factory_girl工厂。
user = Factory(:user, :username => "kai", :email => "xxx@yyy.com", :password => "testing")
entity = Factory.create(:entity, :name => "Test Entity", :creator => user)
当我使用 :creator => User.first
时,一切都按预期进行。我打印了 User.first
和 user
,但看不出有什么区别。
有什么建议吗?
更新
我在运行这个简单的请求规范时也遇到了这个错误
describe "Entities" do
it "should succeed" do
entity = Factory.create(:entity, :name => "Test Entity 1")
visit root_path
end
it "should also succeed" do
entity = Factory.create(:entity, :name => "Test Entity 2")
property = Factory.create(:property, :entity => entity)
end
end
这次我得到
Failure/Error: property = Factory.create(:property, :entity => entity)
ActiveRecord::AssociationTypeMismatch:
Entity(#103620190) expected, got Entity(#96047070)
当我删除 visit root_path
时,一切正常(在单独运行每个规范时也是如此)。这似乎是请求规范的问题。其他规范(型号、 Controller )似乎运行良好。我使用 Capybara 1.0.0.beta1 和 RSpec 2.5。
类名后面的这个数字是什么意思?
最佳答案
这是加载两个不同版本的模型时发生的错误。我曾经在旧版本的 Rails 3 中点击它,因为开发环境的模型重新加载器有点小故障。类名后面的数字表示该类的不同版本。
按理说,这种错误可能会出现在开发模式下,但它不应该出现在测试模式下,因为默认情况下,类会被缓存。查看 config/environments/test.rb
文件以确保 cache_classes
设置为 true。
还要检查您使用的是不是最新版本的 Rails 3.0.7。这可能是一个已修复的错误。当我们这样做时,请检查您是否使用 factory_girl 1.3.3。当完全正确地使用 API 时(我认为您正在这样做),剩下的唯一可能性就是配置错误或其他人代码中的错误。
关于ruby-on-rails - 奇怪的 ActiveRecord::AssociationTypeMismatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5954690/