Bağlam
Biz 3.2.12 4.0.2 ve Ruby 1.9.3 2.1.8 Raylar taşıma işleminin gerçekleştirileceği verir.Raylar 3 ila 4 göç benzersizliği doğrulama
RSpec biçiminde geçişi gerçekleştirmek için çok fazla test kapsamımız var.
Sayı Bir Kart modeline bir benzersizliği doğrulama başarısız olduğunu denetler spec
biri. Bir program_member
tek mobile: true
kartı olabilir
validates :mobile, uniqueness: {scope: :program_member_id, message: I18n.t('models.card.error.cardholder_already_has_mobile')}, if: :mobile
.
Bu özellik, üye için 2 kart oluşturur, birini bir mobil karta dönüştürür, ardından ikinci karta yaptığınızda doğrulama mesajını bekler.
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
Beklenti:
expected {} to include {:mobile=>["Cardholder already has a mobile card"]}
bizim master
şubesine gidip, bu teknik özellik geçer.
Bu belirtimden çalışmayan tek faktör, Rails 3'ten 4'e geçiştir.
Her iki örnekte de üye kodunu 2 cep kartına sahip olduğunu ve card.valid?
öğesinin true
değerini döndürerek konsolda çalıştırılmasını denedim.
Soru
şey benzersizliği doğrulama veya doğrulama yaşam döngüsünün açısından Raylar 4'te değişti mi?
Tam olarak ne register_card'nın paylaştığını paylaşır mısınız? –
@JanKlimo Sorunu, kartı bir program_member_user öğesine atamak için çalıştırılan gerçek kodu yansıtacak şekilde güncelledim.Her şeyi manuel olarak konsolda eklediğimde bile, doğrulama işleminin hala işe yaramayabilir. Doğrulama koşulunun kaldırılmasının bile bir etkisi yoktur (yani, mobil olmayan kartların benzersizliği için doğrulama gerçekleştirilir). – fbelanger
Hmm, kodunuzda herhangi bir sorun görmediğimden çok garip. Probleminizin basitleştirilmiş bir versiyonunu, ancak aynı doğrulamayı içeren bir test repo oluşturdum. Kopyalayıp rspec'i çalıştırırsanız, test geçer mi? https://github.com/janklimo/TestUniquenessApp –