Ruby / Rails: AssociationTypeMismatch с правильной ассоциацией, но ожидает другой идентификатор объекта? Whaaa? - PullRequest
1 голос
/ 26 января 2012

Итак, я получаю довольно странную ошибку ... Я пытался ее изолировать, но она квази-прерывистая. Мне интересно, имеет ли это какое-то отношение к использованию капибары с драйвером javascript, потому что этого не происходит в моих тестах, не относящихся к капибаре. Вот оно:

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 Ответ

1 голос
/ 27 января 2012

Таким образом, ответ, как указал Фредерик Ченг , состоял в том, чтобы установить cache_classes в true в test.rb.

Это предположительно противоречит spork, поэтому я и былв первую очередь сказал отключить его - поскольку вы хотите, чтобы spork перезагружал ваши модели и так далее при каждом запуске другого теста.Решение состоит в том, чтобы установить cache_classes в true, но также поместить ActiveSupport::Dependencies.clear в свой блок prefork.

Ссылки:

  1. ActiveSupport: Dependencies
  2. Перезагрузка моделей
  3. Наконечники Spork
  4. Объяснение Spache cache_classes
...