コントローラのテストに関するチュートリアルを見ると、作成者はコントローラのアクションをテストするrspecテストの例を示しています。私の質問は、なぜ彼らはメソッドattributes_for
build
以上?なぜ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
チュートリアルのリンクはここにあります: http://everydayrails.com/2012/04/07/testing-series-rspec-controllers.html 例は、最初のトピックセクションController testing basics
attributes_for
はハッシュを返しますが、build
は永続化されていないオブジェクトを返します。
次のファクトリがあるとします。
FactoryGirl.define do
factory :user do
name 'John Doe'
end
end
build
の結果は次のとおりです:
FactoryGirl.build :user
=> #<User id: nil, name: "John Doe", created_at: nil, updated_at: nil>
とattributes_for
の結果
FactoryGirl.attributes_for :user
=> {:name=>"John Doe"}
ユーザーを作成するために次のようなことができるので、attributes_for
は機能テストに非常に役立ちます。
post :create, user: FactoryGirl.attributes_for(:user)
build
を使用する場合、user
インスタンスから属性のハッシュを手動で作成し、それをpost
メソッドに渡す必要があります。
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
属性ハッシュではなくオブジェクトが直接必要な場合、通常はbuild
&create
を使用します
詳細が必要な場合はお知らせください