Это приложение для рельсов. Рельсы 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)
0
Sam J 6 Окт 2019 в 23:43
1
Добавьте неудачный тест.
 – 
Sebastian Palma
7 Окт 2019 в 00:18

2 ответа

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

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

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

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

0
Grzegorz 7 Окт 2019 в 17:06

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

Тест заставил метод is_a? возвращать false для этого конкретного экземпляра Patient.

Бог знает, почему я сделал это 3 месяца назад!

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

0
Sam J 8 Окт 2019 в 14:43