39

コントローラーのテストに関するチュートリアルを見て、著者はコントローラーのアクションをテストする 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

4

1 に答える 1

69

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

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

于 2012-10-31T02:14:47.373 に答える