Классы Ruby кажутся одинаковыми, но не считаются равными - PullRequest
0 голосов
/ 14 июля 2011

Как два объекта могут казаться идентичными, но не идентичными?

Имеет pickle_step, который запускает код "модель! (Владелец) .send (ассоциация) .should == модель! (Цель)"

При запуске в теге (cucumber --tags @thisonescenario) владелец и цель совпадают, и тест проходит.

При запуске с остальными сценариями (огурец) владелец и цель не являютсято же самое.

После проверки (rdebug) код говорит, что классы не совпадают, даже если они действительно кажутся.Вывод шага огурца выглядит следующим образом:

  expected: #<Content _id: content_1, _type: nil>
       got: #<Content _id: content_1, _type: nil> (using ==)
  Diff: (RSpec::Expectations::ExpectationNotMetError)

Примечание: == перегружен библиотекой Mongo с кодом ниже:

def ==(other)
  self.class == other.class &&
  attributes["_id"] == other.attributes["_id"]
end

Сравнение _id верно.Self.class == other.class имеет значение false.

Проверка свойств классов, таких как потомки, предки и т. Д., Показывает, что они одинаковы.

Есть идеи?

1 Ответ

0 голосов
/ 14 июля 2011

Что если вы используете === вместо == для сравнения имен классов?

что-то вроде

other === self  && ...
...