SORU
24 EYLÜL 2011, CUMARTESİ


Raylar 3.1, RSpec: test modeli doğrulamaları

Raylar TDD ile yolculuğum başladı ve bir çözüm bulmak için görünmüyor olabilir bu model doğrulamaları için test ile ilgili küçük bir sorun haline çalıştırmak. Diyelim Kullanıcı bir modeli var ki

class User < ActiveRecord::Base
  validates :username, :presence => true
end

ve basit bir test

it "should require a username" do
  User.new(:username => "").should_not be_valid
end

Bu doğru varlığını doğrulama, ama eğer daha spesifik olmak istersem HANGİ TESTLER? Örneğin, hataları test full_messages.. nesne

it "should require a username" do
  user = User.create(:username => "")
  user.errors[:username].should ~= /can't be blank/
end

İlk girişimi hakkında endişe (should_not be_valid kullanarak) RSpec açıklayıcı bir hata iletisi oluşturmak zorunda kalmayacak. Sadece "geçerli beklendiği? yanlış dönmek, doğru." Ancak, ikinci test örnek küçük bir dezavantajı var: bu hataları almak için yeni bir yöntem yerine yöntem oluşturmak nesne kullanır.

Benim testler ne testi yaptıklarını hakkında daha spesifik olmak istiyorum, ama aynı zamanda bir veritabanı dokunmak zorunda değil.

Kimse herhangi bir giriş var mı?

CEVAP
24 EYLÜL 2011, CUMARTESİ


İlk kötü bir isim olduğunu söylemek isterim.

İkinci olarak, seni TEBRİK ederim geri aramaz bir kez başlayınca söz veriyorum ROR ile TDD içine çaba.

Basit, hızlı ve kirli çözüm bu gibi testler her önce geçerli yeni bir model oluşturmak için:

 before(:each) do
    @user = User.new
    @user.username = "a valid username"
 end

AMA benim önerim senin için geçerli bir model oluşturacak tüm modeller için fabrikalar otomatik olarak ayarlanır ve daha sonra bireysel özellikler ile karışıklık ve doğrulama görebilirsiniz. Bunun için FactoryGirl kullanmak gibi:

Test şöyle bir şey görünecektir kurmak aldıktan sonra temel olarak:

it "should have valid factory" do
    FactoryGirl.build(:user).should be_valid
end

it "should require a username" do
    FactoryGirl.build(:user, :username => "").should_not be_valid
end

Tabi ya, ve burada benden daha iyi açıklar o a good railscast:

iyi şanslar :)


GÜNCELLEME: version 3.0 fabrika kızı sözdizimi değişti. Örnek kodum bu yansıtacak şekilde değiştirildi.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Avast

    Avast

    27 NİSAN 2006
  • Elly Awesome

    Elly Awesome

    15 ŞUBAT 2010
  • Apple&Tech Reviews & Giveaways

    Apple&Tech R

    12 Temmuz 2008