ruby-on-rails – FactoryGirlとRspecのテストにおけるattributes_forの意味

コントローラテストのチュートリアルを見ると、著者はコントローラの動作をテストするrspecテストの例を示しています。私の質問は、なぜ彼らはbuild_forメソッドでbuild_forメソッドを使用したのですか?属性のハッシュを返すこと以外に、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例は冒頭のトピックコントローラテストの基本にあります

ベストアンサー
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を使用するときは、ユーザーインスタンスから手動で属性のハッシュを作成し、それを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

私は通常ビルドを使用します。属性ハッシュではなくオブジェクトを直接欲しいときに作成する

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

転載記事の出典を記入してください: ruby-on-rails – FactoryGirlとRspecのテストにおけるattributes_forの意味 - コードログ