2013-09-08 18 views
25

shoulda-matchers ve RSpec'in yeni expect syntax'u kullanmak için doğru biçim nedir?shoulda-matchers RSpec bekliyoruz sözdizimi

+0

Üzgünüm İlişkin gerekirdi – trev9065

+0

geliyordu oy kapatılan tabanlı dayalı bu varlık öncelikle görüşüne ben wou Bir şeyin "iyi bir fikir" olup olmadığını sormanın bu özel örneğinin bir istisna olduğunu öne sürüyorum çünkü endişenin konu dışı olduğu gerçeğine dayalı bir açıklama var. –

+0

, SO için uygun olmasını sağlamak için sorgu detayını düzenledi. –

cevap

55

şöyle bir kesinlikle yeni beklemek söz dizimi ile gerekirdi-matchers kullanabilirsiniz iken:

it 'should validate presence of :email' do 
    expect(subject).to validate_presence_of :email 
end 

veya daha fazla özlü ama daha az okunabilir: Bu

it { expect(subject).to validate_presence_of :email } 

tek satırlık should formatını Genellikle kullanılan eşleştiriciler, config.syntax == :expect olduğunda bile 2.14'te açıkça desteklenir. should gibi bir örtülü konu ile kullanılırken:

describe User 
    it { should validate_presence_of :email } 
end 

bu should aksi bağlıdır Kernel maymun yama dayanmaz.

Bu, https://github.com/rspec/rspec-expectations/blob/master/Should.md kapsamındadır. Aslında, bu dokümantasyon bu istisnayı göstermek için yukarıdaki shoulda eşleştirici örneğini kullanır.

Ayrıca, it seçeneğine alternatif olarak kullanmanıza izin veren bir yapılandırma seçeneğini ele alan Using implicit `subject` with `expect` in RSpec-2.11'a da bakın.

expect_it { to validate_presence_of :email } 

Güncelleme: RSpec 3.0 (beta2) itibariyle de kullanmak mümkün olacak:

it { is_expected.to validate_presence_of :email } 
+0

İlk blok da 'Kullanıcıyı Tanımla' ile çevrelenir, değil mi? 3 satırdan 3 farklı çizgiye benzediği için, ama tam olarak değil. Öyleyse ilk kod bloğunda netlik için bunu eklemek isteyebilir. –

+0

@MichaelDurrant Evet, öyle olurdu. Kabul. Bunu işaretlediğiniz için teşekkürler. Cevap güncellendi. –

+0

Downvote'un ne anlama geldiği hakkında bir fikri olan var mı? Bu "esas olarak fikir temelli" olmak için yakın oylarla mı ilgili? –

0

Ben @ peter-alfvin cevabını suplement edeceğiz. Eğer siz it bloğunun dışında :expect kullanamaz modeli ve shoulda-matchers ile göç kendilerini test, bu yüzden yazamıyorum:

RSpec.describe ModelName, type: :model do 
    expect(subject).to belong_to(:user) 
end 

Ve expection alacak:

`expect` is not available on an example group (e.g. a `describe` or `context` block). 

ancak doğru sürümü:

RSpec.describe ModelName, type: :model do 
    it { expect(subject).to belong_to(:user) } 
end