रेल और आरएसपीसी समानता परीक्षणों में कई प्रकार के विकल्प हैं।
रेल 3.2 ActiveRecord :: बेस ==
समानता matcher का उपयोग करता है।
यह रिटर्न सच दो अलग अलग तरीकों:
- तो
self
तुलना वस्तु
- तो
self
तुलना वस्तु के रूप में एक ही प्रकार है और आईडी समान होता है के रूप में एक ही सटीक वस्तु है
ध्यान दें कि ActiveRecord :: बेस में ==
विधि है जो eql?
के रूप में उपनाम है। यह सामान्य रूबी ऑब्जेक्ट्स से अलग है, जो ==
और eql?
को अलग-अलग परिभाषित करता है।
a.should equal(b) # passes if a.equal?(b)
a.should eql(b) # passes if a.eql?(b)
a.should == b # passes if a == b
RSpec भी एक डीएसएल के और अधिक के लिए उन्हें लग रहा है इरादा दो समानता matchers है:
RSpec 2.0 rspec-उम्मीदों में इन समानता matchers है
a.should be(b) # passes if a.equal?(b)
a.should eq(b) # passes if a == b
अपने उदाहरण में आप फिर इसे खोजने के बाद एक रिकॉर्ड बना रहे हैं। अगर यह ठीक उसी वस्तु या एक ही आईडी से एक बराबर व्यक्ति रिकॉर्ड को पुन: प्राप्त
परीक्षण करने के लिए, तो should ==
का उपयोग या इसके समकक्ष a.should eql
या उसके:
तो तुम परीक्षण #find_by_name
के लिए दो विकल्प हैं अगर यह ठीक उसी वस्तु का उपयोग करता डीएसएल संस्करण should eq
परीक्षण करने के लिए नहीं एक ही आईडी से एक बराबर व्यक्ति रिकॉर्ड, तो ०१२३५३६०५४११ का उपयोगया उसके डीएसएल संस्करण should be
कौन से दो अलग-अलग वस्तुओं आप की बात कर रहे हैं? – jtbandes
@jtbandes: पहली पंक्ति में एक ऑब्जेक्ट लौटाया जाता है जिसे "व्यक्ति" का संदर्भ दिया जाएगा। दूसरी पंक्ति में एक वस्तु को वापस कर दिया जाता है और यह वस्तु व्यक्ति के बराबर होनी चाहिए। तो क्या दो वस्तुएं नहीं हैं? –
या तो ए) सटीक उसी वस्तु को वापस किया जा सकता है; या बी) दूसरी वस्तु बराबर हो सकती है (अपने स्वयं के 'बराबर?' या अन्य विधि से) पहले, समान गुण रखने की तरह (इस मामले में, 'नाम')।ActiveRecord :: बेस दस्तावेज़ पढ़ें। – jtbandes