2011-06-23 3 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 

これらは事実上同じですか?あるいは、2番目は機能しないのでしょうか?可能であれば私が従っているチュートリアルはresponseを使用しているようですが、上記の場合は実行しませんでした。誰かが上記の2つの方法の違いを説明できますか?ラムダとRSpecの応答の仕組みは?ありがとう!

+0

ラムダ法は第二の方法は、応答が変わる述べているよう全体的なアクションは1場所でのユーザー数を変更することを述べてユーザーカウント+1。 – basicxman

答えて

10

ラムダ形式は、テスト・データベースが空の場合、これを行うことに相当します。

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

は、私はあなたの第二の例で示したように、ブロックを供給することなく、changeを呼び出すと、エラーが発生しますと信じています。

ラムダフォームは、より便利な方法で期待値を設定し、前後の条件でテストするために使用できるコードセクションをラップするために使用されます。 RSpecのの最近のバージョンでは、また、これはexpectで行わわかります

expect { 
    post :create, :user => @attr 
}.to change(User, :count).by(1) 
関連する問題