SORU
12 Mayıs 2011, PERŞEMBE


Rspec - izin ve daha önce blok arasındaki Fark

Arasındaki fark ve rspec blok izin vermeden önce nedir?

Ve bu blok kullanılır?

İyi yaklaşımın ne olacağı ya da örnekte önce içeri

let(:user) { User.make !}
let(:account) {user.account.make!}

before(:each) do
 @user = User.make!
 @account = @user.account.make!
end

Bu stackoverflow post okudum

Ama iyi yukarıdaki gibi dernek şeyler için izin tanımlamak için?

CEVAP
26 Mart 2013, Salı


İnsanların ihtilafa düştükleri temel bazı yollar da açıkladığımız gibi, ama önce dışarı bıraktı (:) ve kullanıldığı tam olarak açıklamıyorsun.

Benim inancım odur ki, örnek değişkenleri yok yeri olarak kullanılan büyük bir çoğunluğu özellikleri, kısmen nedeniyle mezkur üst this article, ama bunu yapmayacağım söz olarak burada bir seçenek.

blok izin

let bir blok içinde kod sadece başvurulan, tembel yükleme bu blokların sipariş ilgisi yoktur anlamına gelir bu zaman yürütülür. Bu tekrarlanan Kur üzerinde aşağı görüşler kesmek için büyük miktarda güç verir.

(Son derece yapmacık ve küçük) bu örneği:

let(:person)     { build(:person) }
subject(:result) { Library.calculate_awesome(person, has_moustache) }

context 'with a moustache' do
  let(:has_moustache) { true } 
  its(:awesome?)      { should be_true }
end

context 'without a moustache' do
  let(:has_moustache) { false } 
  its(:awesome?)      { should be_false }
end

has_moustache farklı her durumda tanımlı olduğunu görebilirsiniz, ama subject tanımını tekrar etmeye gerek yok. let son blok geçerli bağlamda tanımlanan kullanılacak önemli bir şey dikkat etmektir. Bu varsayılan gerekirse üzerine olan görüşler çoğunluğu için kullanılacak ayarı için iyidir.

Örneğin, calculate_awesome dönüş değeri ise kontrol top_hat 10 *model true geçti, ama bıyıksız olacaktır:

context 'without a moustache but with a top hat' do
  let(:has_moustache) { false } 
  let(:person)        { build(:person, top_hat: true) }
  its(:awesome?)      { should be_true }
end

Başka bir şey için not edeyim bloklar, onlar kullanılmamalıdır eğer aradığınız bir şey getirilmemiş olan kayıtlı bir veritabanı (yani Library.find_awesome_people(search_criteria)) gibi olmayacak veritabanına sürece onlar zaten başvuruyor. let! before bloklar kullanılmalıdır.

Ayrıca,aslahiçbefore let blok yürütme tetiklemek için kullanın, Bu let! için yapılır!

izin verin! engeller

let! blok tanımlanmış düzeni (daha önce bir blok gibi) yapılır. Bu değişken, örnek geri değişkenler düşmek gerek yerine daha açık bir başvuru olsun, bir temel fark blokları için önce.

let! birden fazla blok aynı adla tanımlanırsa let bloklar gibi en son yürütme kullanılacaktır. Temel fark let! blok let blok sadece son kez çalıştırır ise eğer bu şekilde kullanılırsa birden çok kez idam edilecektir.

(:her) önce engeller

before(:each) blok önce varsayılan ve bu nedenle before(:each) {} tam her zaman belirlemek yerine before {} olarak başvurulabilir.

Birkaç temel durumlarda before blokları kullanmak kişisel tercihim. Engellerse önce kullanacağım:

  • Alay, stubbing veya iki katına kullanıyorum
  • Herhangi bir makul büyüklükte Kur (genellikle bu fabrika özellikleri düzgün Kur henüz bir ibret) vardır
  • Başvuru için doğrudan ihtiyacım yok ki elimizde çok sayıda var, ama kurulum için gereklidir
  • Raylar fonksiyonel denetleyicisi testleri yazıyorum, ve test için özel bir istek (28* yani *) çalıştırmak istiyorum. Bir çok durumda bu subject kullanabilirsiniz olsa bile, eğer bir başvuru gerektirir ama bazen daha açık hissediyor.

Eğer varsa gözlüğüne before büyük bloklar kendini ifade bulursanız, fabrikalarınız kontrol edin ve tam özellikleri ve esneklik anlamak emin olun.

(:) önce engeller

Bu sadece bir kez, geçerli bağlam (ve çocuklar) görüşler önce yürütülür. Bu eğer bu yürütme ve çaba azaltmak olabilir bazı durumlar vardır gibi doğru yazılmış, büyük bir avantaj için kullanılabilir.

Bir örnek pek yürütme zaman etkileyecek () sadece bir kez yapmanız gereken bir test ENV değişkeni, bir alay.

Yardımcı olur :) umarım

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Fuse

    Fuse

    21 Kasım 2005
  • RD

    RD

    19 NİSAN 2006
  • RickardRick

    RickardRick

    9 Mart 2007