Ruby / Rails:AssociationTypeMismatch具有正确的关联,但它期望不同的对象id? Whaaa?

时间:2012-01-26 06:52:55

标签: ruby-on-rails activerecord rspec capybara

所以,我在这里得到了一个非常奇怪的错误......我试图隔离它,但它是准间歇性的。我有点想知道它是否与使用带有javascript驱动程序的capybara有关,因为这不是在我的非水豚测试中发生的。这是:

Failure/Error: @existing_user, household = create_new_user_and_household
ActiveRecord::AssociationTypeMismatch:
 User(#57141560) expected, got User(#42098260)
# ./app/models/household.rb:64:in `block in create_new_household'
# ./app/models/household.rb:62:in `new'
# ./app/models/household.rb:62:in `create_new_household'
# ./spec/support/spec_helpers.rb:55:in `create_new_user_and_household'
# ./spec/integration/accepting_an_invitation_spec.rb:21:in `block (4 levels) in <top (required)>'

以下是相关区块:

household = Household.new attributes, do |h|
  h.account = user.account || Account.create(user: user)
end

非常基本,在rails控制台中手动执行时效果很好。

我不知道还有什么能告诉你们......但我很乐意提供更多信息。

我正在使用rspec进行所有测试。

1 个答案:

答案 0 :(得分:1)

正如Frederick Cheung指出的那样,答案是在cache_classes中将true设置为test.rb

这应该与spork发生冲突,这就是为什么我被告知首先将其关闭的原因 - 因为你希望spork重新加载你的模型以及什么时候你再进行另一次测试。解决方案是将cache_classes设置为true,但也将ActiveSupport::Dependencies.clear放入spork prefork块。

参考文献:

  1. ActiveSupport:Dependencies
  2. Reloading Models
  3. Spork tips
  4. Spork cache_classes explanation