ruby-on-rails - rails - factorybot association
Significado de attributes_for en FactoryGirl y Rspec Testing (1)
attributes_for
devolverá un hash, mientras que build
devolverá un objeto no persistente.
Dada la siguiente fábrica:
FactoryGirl.define do
factory :user do
name ''John Doe''
end
end
Aquí está el resultado de la build
:
FactoryGirl.build :user
=> #<User id: nil, name: "John Doe", created_at: nil, updated_at: nil>
y el resultado de attributes_for
FactoryGirl.attributes_for :user
=> {:name=>"John Doe"}
Los attributes_for
me parecen muy útiles para mi prueba funcional, ya que puedo hacer cosas como las siguientes para crear un usuario:
post :create, user: FactoryGirl.attributes_for(:user)
Al usar build
, tendríamos que crear manualmente un hash de atributos de la instancia del user
y pasarlo al método de post
, como por ejemplo:
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
Usualmente uso build
& create
cuando quiero objetos directamente y no un hash de atributos
Déjeme saber si usted necesita más detalles
Al ver un tutorial sobre la prueba del controlador, el autor da un ejemplo de una prueba rspec que prueba una acción del controlador. Mi pregunta es, ¿por qué usaron el método attributes_for
over build
? No hay una explicación clara de por qué se utiliza attributes_for
además de que devuelve un hash de valores.
it "redirects to the home page upon save" do
post :create, contact: Factory.attributes_for(:contact)
response.should redirect_to root_url
end
El enlace del tutorial se encuentra aquí: http://everydayrails.com/2012/04/07/testing-series-rspec-controllers.html El ejemplo se encuentra en la sección de temas de inicio Controller testing basics