Acceder a fábricas factory_girl en * otras * fábricas
Frecuentes
Visto 6,612 equipos
20
Estoy usando el chica_de_fabrica plugin en mi aplicación de rieles. Para cada modelo, tengo un archivo ruby correspondiente que contiene los datos de fábrica, por ejemplo
Factory.define :valid_thing, :class => Thing do |t|
t.name 'Some valid thing'
# t.user ???
end
Tengo muchos tipos diferentes de usuarios (ya definidos en la fábrica de usuarios). Sin embargo, si intento lo siguiente:
Factory.define :valid_thing, :class => Thing do |t|
t.name 'Some valid thing'
t.user Factory(:valid_user) # Fails
end
Obtuve el siguiente error:
# No such factory: valid_user (ArgumentError)
Sin embargo, el: valid_user es realmente válido; puedo usarlo en mis pruebas, pero no en mis fábricas. ¿Hay alguna forma de que pueda usar una fábrica definida en otro archivo aquí?
3 Respuestas
31
Debes usar este código:
Factory.define :valid_thing, :class => Thing do |t|
t.name 'Some valid thing'
t.user { Factory(:valid_user) }
end
Envolver la llamada en {} hace que Factory Girl no evalúe el código dentro de las llaves hasta que se cree la fábrica: valid_thing. Esto lo obligará a esperar hasta que se cargue la fábrica: valid_user (Su ejemplo falla porque aún no se ha cargado), también hará que se cree un nuevo: valid_user para cada: valid_thing en lugar de tener el mismo usuario para todos : valid_thing's (que es probablemente lo que quieres).
Respondido 10 Feb 10, 06:02
4
Intente usar el método de asociación como:
Factory.define :valid_thing, :class => Thing do |t|
t.name 'Some valid thing'
t.association :valid_user
end
Respondido 10 Feb 10, 03:02
tu tambien puedes hacer t.association :user, factory: :valid_user
- Kris
3
Potencialmente una nueva característica para Factory Girl a juzgar por la edad de la pregunta, pero si el nombre de su atributo en Factory es el mismo que el nombre de la fábrica, simplemente llamar al nombre del atributo en su fábrica lo completará con la Generación de fábrica asociada.
FactoryGirl.define do
factory :thing do
user
end
end
Esto debería dar como resultado que el campo de usuario busque una fábrica con el mismo nombre y la complete a partir de eso.
Respondido 26 Abr '17, 07:04
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas ruby-on-rails tdd factory factory-bot or haz tu propia pregunta.
Esto funciona bien. Solo se que el
Factory(:valid_user)
la sintaxis ha quedado obsoleta; usarFactoryGirl.create(:valid_user)
en lugar de. - erik jUsar
create(:valid_user)
cuando trato de construir (: valid_thing) realmente haré una creación, ¿verdad? ¿Hay alguna manera de hacer que esta referencia sea genérica para ser creada / construida dependiendo de cuál se llame? - mpgarar@mpgarate - No, la compilación no lo hará - B siete
La
Factory(:valid_user)
la sintaxis no solo está obsoleta en este momento; se ha ido totalmente ahora, sin mensaje de desaprobación Simplemente puede usarcreate(:valid_user)
, sinFactoryGirl
. - Jim Stewart