pruebas secadora con asociaciones en factory_girl
-
16-09-2019 - |
Pregunta
Puede alguien sugerir una mejor manera de hacer una fábrica de usar un modelo pre-construidos
instancia por su asociación? Por ejemplo, por lo que sería posible
a continuación para definir un niño de la fábrica de mensajes de manera que una llamada a
Factory(:my_message)
podría sustituir
Factory(:message,:sender=>@me)
?
A veces el hash configuración es más complicado que en este artificial ejemplo, o simplemente se repite en tantas pruebas que parecería mejor para empujar hacia abajo en la fábrica.
Una de las alternativas que se me ocurre es definir un método de ayuda de prueba
como create_message_owned_by(@me)
, pero estoy esperando que hay una manera en sí factory_girl.
fábricas factory_girl:
Factory.define :sender do |s|
sender.name "Dummy name"
end
Factory.define :message do |msg|
msg.text "Dummy text"
msg.association :sender
end
Factory.define :my_message, :parent=>:message do |msg|
msg.text "Dummy text"
### ? what goes here for msg.association :sender ? ###
end
extracto MessagesControllerTest (usando shoulda):
context "on GET /messages" do
setup do
@me = Factory(:sender)
@my_message = Factory(:message,:sender=>@me)
@somebody_elses_message = Factory(:message)
sign_in_as(@me)
get :index
end
should "only assign my messages" do
assert_contains(assigns(:messages), @my_message)
assert_does_not_contain(assigns(:messages), @somebody_elses_message)
end
end
Solución
No sé si esto es lo que está buscando, pero si primero se crea el mensaje se puede recuperar el emisor a través de ese y asignarlo a @me
.
@my_message = Factory(:message)
@me = @my_message.sender
¿Le ayuda en absoluto?
Otros consejos
Ignorando por un minuto el problema de crear una dependencia clara, el ejemplo anterior podría ser manejado con las nuevas devoluciones de llamada en factorygirl 1.2.3. En la actualidad hay after_build
y after_create
devoluciones de llamada, de manera que se pueden realizar operaciones sobre los objetos creados después de que ya existen en la base de datos (y tener un id para agarrarse a, etc).
esta pregunta y este hilo de la lista de correo factory_girl