प्रसंग
हम रेल से 3.2.12 4.0.2 करने के लिए और रूबी 1.9.3 2.1.8 की ओर पलायन कर रहे हैं।रेल 3 से 4 प्रवास विशिष्टता सत्यापन संबंधी समस्याएं
हमारे पास आरएसपीसी के रूप में माइग्रेशन को पूरा करने के लिए बहुत से परीक्षण कवरेज हैं।
अंक
कल्पना है कि जाँच करता है कि एक कार्ड के मॉडल पर एक विशिष्टता सत्यापन विफल हो रहा है में से एक।
validates :mobile, uniqueness: {scope: :program_member_id, message: I18n.t('models.card.error.cardholder_already_has_mobile')}, if: :mobile
जहां एक program_member
केवल एक mobile: true
कार्ड हो सकता है।
spec सदस्य के लिए 2 कार्ड बनाता है, एक मोबाइल कार्ड में बदल जाता है, फिर दूसरे कार्ड के साथ ऐसा करने पर सत्यापन के संदेश की अपेक्षा करता है।
let(:program) { FactoryGirl.create(:program) }
let(:card) { FactoryGirl.create(:card, program: program) }
context 'when cardholder already has a mobile card' do
it 'fails validation' do
card2 = FactoryGirl.create(:card, program: program)
program_member_user = FactoryGirl.create(:program_member_user, card_number: card2.cardnumber)
program_member = program_member_user.program_members.first
program_member.cards << card2
card2.update_attributes(:mobile => true)
program_member.cards << card
card.update_attributes(:mobile => true)
expect(card.errors.messages).to include(:mobile=>[I18n.t('models.card.error.cardholder_already_has_mobile')])
end
end
उम्मीद:
expected {} to include {:mobile=>["Cardholder already has a mobile card"]}
जब मैं हमारे master
शाखा में जाते हैं, इस कल्पना से गुजरता है।
असफल होने के लिए काम कर रहे इस spec से बदल गया एकमात्र कारक रेल 3 से 4 माइग्रेशन है।
केवल कंसोल में spec कोड चलाने का प्रयास करने के लिए सदस्य के पास 2 मोबाइल कार्ड हैं और card.valid?
दोनों उदाहरणों के लिए true
लौटाते हैं।
प्रश्न
कुछ भी विशिष्टता सत्यापन या सत्यापन जीवन चक्र के संबंध में रेल 4 में परिवर्तित किया गया?
क्या आप पूर्णता के लिए 'register_card' क्या साझा करते हैं, साझा करना चाहते हैं? –
@JanKlimo मैंने एक प्रोग्राम_member_user को कार्ड असाइन करने के लिए निष्पादित वास्तविक कोड को प्रतिबिंबित करने के लिए प्रश्न को अद्यतन किया है।यहां तक कि जब मैं कंसोल में मैन्युअल रूप से सबकुछ जोड़ता हूं, तब भी मुझे काम करने के लिए सत्यापन नहीं मिल सकता है। सत्यापन की स्थिति को हटाने से भी कोई प्रभाव नहीं पड़ता है (यानी, गैर-मोबाइल कार्ड के लिए विशिष्टता के लिए सत्यापन करना)। – fbelanger
हम्म, बहुत अजीब है क्योंकि मुझे आपके कोड में कोई समस्या नहीं दिख रही है। मैंने आपकी समस्या के सरलीकृत संस्करण के साथ एक परीक्षण रेपो बनाया लेकिन समान सत्यापन। यदि आप इसे क्लोन करते हैं और rspec चलाते हैं, तो परीक्षण पास हो जाता है? https://github.com/janklimo/TestUniquenessApp –