2011-06-23 68 views
7

有人可以向我解釋以下方法之間的區別嗎?RSpec - 拉姆達用法

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

這是目前的方法。這也可以用下面的方法來實現嗎?

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

這些實際上是一樣的嗎?還是第二個不行?因爲我所遵循的教程似乎儘可能使用response,但在上述情況下卻沒有這樣做。有人可以解釋上述兩種方法之間的區別,lambda和RSpec的響應如何工作?謝謝!

+0

拉姆達方法,指出總體行動+1更改的用戶數,其中作爲第二個方法陳述響應改變用戶數+1。 – basicxman

回答

10

拉姆達形式等同於這樣做,如果測試數據庫是空的:

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

我相信,打電話change沒有提供一個塊,因爲你在第二個例子中顯示,將產生一個錯誤。

lambda表單用於包裝一段代碼,可用於以更方便的方式設置期望值,然後使用之前和之後的條件進行測試。在較新版本的RSpec的你也看到這一點expect做:

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