2013-07-19 20 views
5

Raylar dünyasına ve test odaklı geliştirmeye yeniyim. TDD için RSpec ve Capybara kullanıyorum. Şu anda, Raylar hakkında daha fazla bilgi edinmek için bir öğretici üzerinde çalışıyorum ve yazar aşağıdaki sözdizimi kullanıyor: hem ne zaman hangi sözdizimi kullanmak merak ediyorum değiştirilebilir gibi görünüyor yanaTDD (Rails); page.should ve expect arasındaki fark (sayfa) .to?

page.should have_title('All users') 
expect(page).to have_selector('li', text: user.name) 

? Çünkü, yukarıda açıklanan vaka için, ayrıca şu şekilde yazabilirim: Temel olarak aynı, değil mi?

Ayrıca, "o" yerine "belirt" i ne zaman kullanmalıyım?

Bu durumda
it { should have_link('Sign out', href: signout_path) } 
specify { expect(user.reload.name).to eq new_name } 

, ben de yazabilirim:

it { should have_link('Sign out', href: signout_path) } 
it { expect(user.reload.name).to eq new_name } 

ben ifade etmek istiyorum dayalı olduğundan hangisinin kullanılacağını kararını sanırım. Belki, bana yardım edebilir misin?

Teşekkürler!

cevap

7
page.should have_title('All users') 
expect(page).to have_selector('li', text: user.name) 

Git İkincisi bir, daha yeni, onlar bu yönde bastırıyorlar. Eskiden vazgeçme niyetleri olup olmadıklarını bilmiyorum, ancak eğer yaparlarsa, tüm kodunuzu güncellemenize gerek kalmayacak.

it { should have_link('Sign out', href: signout_path) } 
specify { expect(user.reload.name).to eq new_name } 

Onlar sadece daha anlaşılır hale getirir birini seçin, takma adları bulunmaktadır. Testlerinizi isimlendirirseniz, hangisinin ne zaman kullanılacağını bileceksiniz (example).

it { should have_link('Sign out', href: signout_path) } 

Açıkçası, ben olmayan adlı Spec stilini önlemek . Bu biraz fazla büyülü, akıl yürütmeyi zorlaştırıyor ve çoğu zaman konunun doğru şekilde çalışmasını sağlamak için akrobatik kurulum gerektiriyor. Ayrıca, özellikleri --format documentation ile çalıştırıyorum ve otomatik olarak oluşturulan mesaj asla istediğimi yapmam. Bu durumda, ben subject ve should kullanarak aynı konularda birden fazla satır için aynı konulara sahip olduğunuzda, it 'has a signout link'

+0

Cevabınız için teşekkürler! Sanırım kullanacağım takma adın ne olduğu hakkında bir fikir edinmek için tüm tdd olayına ve söz dizimine alıştım. btw: "--format belgeleri" oldukça hoş. – milchschaum

0

expect'u kullanmak, kodunuzu daha az DRY yapabilir. Bkz:

subject { page } 
it { 
    should have_title('All users') 
    should have_selector('li', text: user.name) 
} 

betterspecs yukarıdaki bağlantı sağladığı Bu ilginç, tercih edilen yöntem expect kullanmak değildir:

page.should have_title('All users') 
page.should have_selector('li', text: user.name) 

Bunu söylemek daha iyidir: http://betterspecs.org/#subject

Bu örneği verdi Ancak, should'u DRY lehine kullanmak için. Bu Burada yaklaşık myronmarston yorumuna görebilirsiniz: http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax#comment-564045016