2011-06-23 27 views
7

Birisi bana aşağıdaki yöntemler arasındaki farkı açıklayabilir misiniz?RSpec - lambda kullanımı

Halihazırda bulunduğu yöntem budur. Bu, aşağıdaki yöntemle de elde edilebilir mi?

it "should create a user" do 
    post :create, :user => @attr 
    response.should change(User, :count).by(1) 
end 

Bunlar etkili midir? Yoksa ikinci çalışmıyor mu? Takip ettiğim eğitici, mümkün olduğunda, response kullanıyor, ancak yukarıdaki durumda bunu yapmadığı için. Birisi yukarıdaki iki yöntem arasındaki farkı açıklayabilir mi, lambda ve RSpec'in yanıtı nasıl çalışır? Teşekkürler!

+0

lambda yöntemi İkinci yöntem yanıtı değiştirir belirten gibi olduğu genel eylem +1 ile Kullanıcı sayısını değiştirir belirten edilir Kullanıcı sayısı +1. – basicxman

cevap

10

lambda form test veritabanı boşsa, bunu eşdeğerdir:

User.count.should == 0 
post :create, :user => @attr 
User.count.should == 1 

Sana İkinci örnekte göstermek gibi bir blok temin etmeden change çağıran bir hata üretecektir inanıyoruz.

Lambda formu, bir beklentiyi daha uygun bir şekilde belirlemek için kullanılabilecek ve daha önce ve sonra koşullar ile test edilebilecek bir kod bölümünü sarmak için kullanılır. RSpec daha yeni sürümlerinde de bu expect ile yapılır görürsünüz:

expect { 
    post :create, :user => @attr 
}.to change(User, :count).by(1)