Rails'deki TDD ile yolculuğuma başladım ve bir çözüm bulmayacağım model doğrulama testleri ile ilgili küçük bir soruna girdim. , I bir kullanıcı modeli var demekRaylar 3.1, RSpec: test modeli doğrulamaları
class User < ActiveRecord::Base
validates :username, :presence => true
end
edelim ve basit bir test
it "should require a username" do
User.new(:username => "").should_not be_valid
end
Bu doğru varlığı doğrulama testleri, ama daha belirgin olmak ne isterseniz? Örneğin, hatalarda test full_messages nesne .. İlk denemede (should_not be_valid kullanarak) hakkında
it "should require a username" do
user = User.create(:username => "")
user.errors[:username].should ~= /can't be blank/
end
Benim endişe RSpec açıklayıcı hata mesajı üretmez olacaktır. Basitçe "beklenen geçerli? Yanlış dönmek, doğru" diyor. Ancak, ikinci test örneğinin küçük bir dezavantajı vardır: hata nesnesine ulaşmak için yeni yöntem yerine oluşturma yöntemini kullanır.
Testlerimin neyi test ettikleri konusunda daha spesifik olmasını isterim, aynı zamanda bir veritabanına dokunmak zorunda kalmam.
Herhangi bir girdi var mı?
Çok teşekkürler Matthew. Test etmeye çalıştığım hataya yaklaşmanın bir yolu var mı? X.should_not be_valid bana çok benzer görünüyor ve yolun aşağısındaki bir şeyin kaydı geçersiz kılacağını bilen var. Bu test daha sonra yanlış noktada başarısız olur. Bu arada, cevabınızı kabul edildi olarak işaretlediğimi düşünüyorum. Ben yapmadım – Feech
Doğru, bu yüzden fabrikalar için tartışıyorum. Tek bir yerde geçerli bir kullanıcı üretmek için kodu yazarsınız ve daha sonra, onu geçersiz kılacağınızdan emin olmak için tüm bireysel testlerden önce geçerli olduğundan emin olmak için bir test yazarsınız. Bu sebepten dolayı modelinizi değiştirdiğinizde modelinizi daha uzun süre fabrikada geçerli bir kullanıcı üretir. Factory.build (: user) .should be_valid' test başarısız olur ve fabrikanızı güncellemeniz gerektiğini bileceksiniz ... ? (ve evet benim 7 cevabı kabul ettiniz) – Matthew
Kusursuz bir açıklama. Tekrar teşekkürler. – Feech