kullanarak Rails'e dahil etme geçerliliği ActiveRecord'umda aşağıdaki doğrulama var.Sınama işlemini nasıl test edebilirim: RSpec
validates :active, :inclusion => {:in => ['Y', 'N']}
Model doğrulamalarımı test etmek için aşağıdakileri kullanıyorum.
should_not allow_value('A').for(:active)
should allow_value('Y').for(:active)
should allow_value('N').for(:active)
Bunu sınamak için daha temiz ve daha fazlası var mı? Şu anda RSpec2 ve shoulda maççıları kullanıyorum.
DÜZENLEME Sadece bu test etmenin bu muhtemelen 'Tamam' bir yolu, olmalıydı bunun için kendi özel eşleyici yazabilir gerektirir bunun için bir şey ve herkes sağlamaz bulundu etrafa bazı sonra
(Ve muhtemelen projeye geri katkıda bulunur). Yukarıda işaret
Linkler: intresting olabilir tartışmalara bazı bağlantılar. Link 1, Link 2
should_ensure_value_in_range
Bu seferki kullanılabilir ne yakın geliyor, ama sadece aralıkları ve değerler listesi kabul eder. Özel eşleştirici buna dayanabilir.Örnekler:
it { should validate_inclusion_check_constraint_on :status, :allowed_values => %w(Open Resolved Closed) } it { should validate_inclusion_check_constraint_on :age, :allowed_values => 0..100 }
eşleştirici
Diğer değerleri göz ardı etmediğini kontrol etmek için a0>, aşağıdaki gibi bir şey yapabilirsiniz: 'it {should_not allow_value ('? '). For (: active)} '- dediğiniz gibi, tüm olası değerleri denetleyemezsiniz, ancak Bu izin verilen tüm değerleri kontrol ek olarak makul kapsama gibi görünüyor. –
bjnord
** 'e atıfta bulunduğunuz shoulda_matcher **, orijinal olarak belirttiğiniz gibi çalışır, yani sağlanan dizide olmayan değerlere izin vermez. [Belgelere bakın] (https://github.com/thoughtbot/shoulda-matchers#ensure_inclusion_of). İyi bir ölçüm için bunu Rails uygulamasında test ettim ve doğru bir şekilde çalışıyor. –
@LarsLevie - Yorum için teşekkürler. 'Disallows_value_outside_of_array?' Seçeneğini kontrol etmek için doğrulama işlemini değiştirmiş görünüyor. Şu andaki https://github.com/thoughtbot/shoulda-matchers/blob/v1.2.0/lib/shoulda/matchers/active_model/ensure_inclusion_of_matcher.rb#L86 adresine bakın ve şimdi https://github.com/thoughtbot/shoulda- eşleştiriciler/blob/15abdf066732828034efea751c2937aa81d080fe/lib/shoulda/matchers/active_model/warranty_inclusion_of_matcher.rb # L90 –