AssociationTypeMismatch, но «ожидаемые» и «полученные» - это один и тот же класс с одинаковым идентификатором объекта - PullRequest
0 голосов
/ 06 октября 2019

Это приложение рельсов. Rails 5.1, Rspec 3.6. У меня есть провальный тест в моем наборе тестов Rspec, и я не могу понять сообщение об ошибке. Насколько я вижу, ассоциация ожидает и получает точно такой же объект, но все равно выдает ошибку. Я был бы признателен за понимание этой ошибки и ее исправление.

Соответствующие (минимальные) определения модели:

class Member < ApplicationRecord
  belongs_to :membership, inverse_of: :members
  belongs_to :patient
end
class Patient < Client
  has_many :members, dependent: :destroy
end

Ошибка:

Failure/Error: return if member.update(membership: membership, patient: person)

     ActiveRecord::AssociationTypeMismatch:
       Patient(#47184337056660) expected, got #<Patient id: 163, ...> which is an instance of Patient(#47184337056660)

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Для будущих читателей потоков я обнаружил проблему:

В тесте был задан метод is_a? для возврата false для этого конкретного Patient экземпляра.

Господь знает, почему 3-несколько месяцев назад-я сделал это!

Под направляющими капота используется этот метод для подтверждения правильного связанного типа объекта. В этом случае rails проверил, является ли экземпляр is_a?(Patient) и вернул ли он ложь. Таким образом, экземпляр пациента действовал так, как если бы он не был экземпляром Patient класса

0 голосов
/ 07 октября 2019

Похоже, в вашей спецификации вы ожидаете класс, но объект этого класса возвращается.

Ожидается пациент (# 47184337056660), получен #, который является экземпляром Patient(# 47184337056660)

Это ключевая информация здесь: , который является экземпляром

Трудно сказать, нужно ли вам исправить спецификации иликод, так как вы не поделились спецификациями вообще.

...