web-dev-qa-db-fra.com

Signification pour attributes_for dans FactoryGirl et Rspec Testing

En parcourant un didacticiel sur les tests de contrôleur, l'auteur donne un exemple de test rspec testant une action de contrôleur. Ma question est, pourquoi ont-ils utilisé la méthode attributes_for sur build? Il n'y a aucune explication claire pourquoi attributes_for est utilisé en plus qu'il retourne un hachage de valeurs.

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

Le lien du didacticiel se trouve ici: http://everydayrails.com/2012/04/07/testing-series-rspec-controllers.html L'exemple se trouve au début de la section de sujet Controller testing basics

35
jason328

attributes_for renverra un hachage, tandis que build renverra un objet non persistant.

Étant donné l'usine suivante:

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

Voici le résultat de build:

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

et le résultat de attributes_for

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

Je trouve attributes_for très utile pour mon test fonctionnel, car je peux faire des choses comme ceci pour créer un utilisateur:

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

Lorsque vous utilisez build, nous devons créer manuellement un hachage d'attributs à partir de l'instance user et le transmettre à la méthode post, comme:

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

J'utilise généralement build & create lorsque je veux directement des objets et non un hachage d'attributs

Faites-moi savoir si vous avez besoin de plus de détails

64
pjam