2012-10-31 8 views
28

コントローラのテストに関するチュートリアルを見ると、コントローラアクションをテストするrspecテストの例が示されています。私の質問は、なぜ build以上の方法を使用したのですか? attributes_forが値のハッシュを返す以外になぜ使用されるのかについての明確な説明はありません。FactoryGirlとRspecテストにおけるattributes_forの意味

it "redirects to the home page upon save" do 
    post :create, contact: Factory.attributes_for(:contact) 
    response.should redirect_to root_url 
end 

チュートリアルのリンクがここに発見された:build以外のオブジェクトを永続返します一方http://everydayrails.com/2012/04/07/testing-series-rspec-controllers.html例が始まる話題区間Controller testing basics

答えて

54

attributes_forで発見され、ハッシュを返します。

を考えると、次の工場:私は私の機能のためのattributes_forは非常に有用見つける

FactoryGirl.build :user 
=> #<User id: nil, name: "John Doe", created_at: nil, updated_at: nil> 

attributes_for

FactoryGirl.attributes_for :user 
=> {:name=>"John Doe"} 

の結果:ここで

FactoryGirl.define do 
    factory :user do 
    name 'John Doe' 
    end 
end 

buildの結果でありますテスト、私は次のようなことをすることができますように私は通常

u = FactoryGirl.build :user 
post :create, user: u.attributes # This is actually different as it includes all the attributes, in that case updated_at & created_at 

post :create, user: FactoryGirl.attributes_for(:user) 

buildを使用して、我々は手動userインスタンスからの属性のハッシュを作成し、そのように、postメソッドに渡す必要があります。oユーザーを作成build & createオブジェクトを直接要求し、属性ハッシュを要求しない場合

詳細が必要な場合はお知らせください

+0

ありがとうございましたpjam、私はそれを今理解しています!あなたは、過剰な流れの中で私のためにrspecのメンターのますますますます増えています。 – jason328

+0

はこの回答を全部探していました。しかし、1つのthign ...私は周りに得るだろう 'post:create、user:u.attributes'これらの属性のいくつかがモデルでアクセスできない場合は? –

+0

私はあなたが欲しいものを理解しているかどうかわかりませんが、attr_accessibleリストに属性がない場合はどういう意味ですか?それから私は問題が何かを見ていない、私はここに何かが不足している可能性があります – pjam

関連する問題