Rails 3.0.3
पर Ruby 1.9.2
में, मैं ऑब्जेक्ट समानता के लिए दो Friend
(वर्ग ActiveRecord::Base
से प्राप्त विरासत) वस्तुओं के बीच परीक्षण करने का प्रयास कर रहा हूं।ऑब्जेक्ट समानता (ActiveRecord) के लिए परीक्षण कैसे करें
ऑब्जेक्ट्स बराबर हैं, लेकिन परीक्षण विफल रहता है:
Failure/Error: Friend.new(name: 'Bob').should eql(Friend.new(name: 'Bob'))
expected #<Friend id: nil, event_id: nil, name: 'Bob', created_at: nil, updated_at: nil>
got #<Friend id: nil, event_id: nil, name: 'Bob', created_at: nil, updated_at: nil>
(compared using eql?)
सिर्फ grins के लिए, मैं ऑब्जेक्ट पहचान के लिए भी परीक्षण करता हूं, जो विफल होने पर विफल रहता है:
Failure/Error: Friend.new(name: 'Bob').should equal(Friend.new(name: 'Bob'))
expected #<Friend:2190028040> => #<Friend id: nil, event_id: nil, name: 'Bob', created_at: nil, updated_at: nil>
got #<Friend:2190195380> => #<Friend id: nil, event_id: nil, name: 'Bob', created_at: nil, updated_at: nil>
Compared using equal?, which compares object identity,
but expected and actual are not the same object. Use
'actual.should == expected' if you don't care about
object identity in this example.
क्या कोई समझा सकता है मेरे लिए ऑब्जेक्ट समानता के लिए पहला परीक्षण विफल क्यों होता है, और मैं उन दो वस्तुओं को सफलतापूर्वक कैसे जोर दे सकता हूं?
पर लेकिन इस मामले में उपलब्ध पहचान स्तंभ 'दोनों मामलों के लिए nil' क्योंकि न तो मधुमक्खी है एन बचाया। 'eql?()' मान और मान दोनों प्रकार की जांच करता है। 'nil.class == nil.class'' true' है और 'nil == nil'' true' है, इसलिए ओपी का पहला उदाहरण अभी भी सत्य होना चाहिए था। आपका उत्तर यह नहीं बताता कि यह झूठी क्यों लौट रहा है। – Jazz
यह सिर्फ अंधा की तुलना नहीं करता है, यह केवल आईडी की तुलना करता है यदि आईडी अर्थपूर्ण हैं। जैसा कि एंडी लिंडमैन के जवाब में बताया गया है: "नए रिकॉर्ड परिभाषा के किसी भी अन्य रिकॉर्ड से अलग हैं"। – Lambart