2010-11-09 21 views
6

Aşağıdaki kodu bir RSpec testine koydum:Shoulda validate_format_of. not_with'in çerçevede (veya benim anlayışımda) bir sorunu var

it { should validate_format_of(:email).not_with('[email protected]')} 

ve asıl sınıfı aşağıdakilerle ayarlayın:

validates :email, :presence => true, :format => /\b[A-Z0-9._%-][email protected](?:[A-Z0-9-]+\.)+[A-Z]{2,4}\b/i 

Ve testleri çalıştırdığımda şunu elde ederim:

Hatalar: 1) Kullanıcı Başarısız/Hata: o {validate_format_of (: email) .not_with ('test @ test')} E-posta "test @ test" olarak ayarlandığında "boş bırakılamaz" hatalar bekleniyor, hatalar var : ["isim boş olamaz (nil)", "e-posta geçersiz (\" test @ test \ ")"] # ./spec/models/user_spec.rb:8:in `blok (2 seviye) '

Geçme testini yaptığımda:

it { should validate_format_of(:email).with('a[email protected]')} 

Her şey beklendiği gibi çalışıyor. Birisi yanlış bir şey yapıyorum ya da bu bir çerçeve problemi olup olmadığını söyleyebilir miyim. Teşekkür ederim.

+0

Başarısız test değeri için 'test @ test' anlamına geldiğinizi farz etmeyin, doğru mu? – zetetic

cevap

21

yerine bu deneyin: Sadece benzer bir sorunla karşılaştık

it { should_not allow_value("[email protected]").for(:email) } 
3

Eğer with_message yöntemi çağırmak ve bir dize ya da hata mesajı ile eşleşen bir regex olarak tam hata mesajı sağlamanız gerekir çıkıyor. Bunu yapmak, validate_format_of'in format hatalarının "boş bırakılamaz" mesajlarla sonuçlandığı ve aslında geçtiği inatçı ısrarını sona erdirmeye ikna edecektir. Örneğin:

it { should validate_format_of(:email).not_with('[email protected]')} 

gerekirdi kütüphanesinde bir böcek gibi

it { should validate_format_of(:email).not_with('[email protected]').with_message(/invalid/)} 

Bu kesin görünüyor olur.

+0

Ayrıca, "with" vakalarında with_message'ı çağırmanız gerektiğini de unutmayın, aksi takdirde, doğrulanan alanın hata listesinde "boş bırakılamıyor" aradığından başarısızlıkla sonuçlanacaktır. – thatothermitch