2012-04-14 17 views
8

¿Cuál es el propósito de las fábricas/accesorios (sé que las fábricas funcionan como accesorios, pero un poco más claras) cuando simplemente puede usar ActiveRecord en la prueba para crear la entrada de la base de datos? es decir News.create (...)Fábricas/Accesorios contra simple Model.create (...)?

Simplemente no veo ninguna ventaja de utilizar Factory Girl en lugar de simplemente crear una nueva Digamos que un nuevo usuario usando métodos ActiveRecord ..

Gracias

Respuesta

2

Tener fábricas y siguiendo el de datos de prueba patrón de construcción hará que lo hace un poco de trabajo al principio, pero realmente le ahorrará tiempo y trabajo en el futuro.

Digamos que tiene un modelo de automóvil, y ese automóvil tiene un propietario, y ese propietario necesita una dirección. Además, cada uno de esos tiene otros campos. Si desea seguir el enfoque de usar los Modelos directamente, deberá crear esos objetos (y las relaciones correspondientes) en cada definición de paso que los requiera. Con la fábrica? Lo va a defínalo solo una vez.

Una vez que haya definido la fábrica en un solo lugar con su estructura correspondiente, todo lo que tendrá que hacer es solicitar un automóvil y Factory se hará cargo de todas las dependencias con otros modelos. ¿No es genial? Al final desea centrarse en la prueba en este momento.

Lo que también es muy cool es que se puede sobrescribir determinados atributos, lo que podría tener, por ejemplo, algo como esto, si desea sobrescribir la velocidad de atributos:

Given /^I have a car running^/ 
Factory :car, speed => 100 
end 

Desde mi humilde punto de Ver, me encanta Factory Girl porque hace que mi código de prueba sea fácil de mantener y muy fácil de leer.

+2

Contrapuntos: todos estos argumentos se aplican también a los dispositivos. Los accesorios son más rápidos en general. ¿Alguna otra razón? – DGM

+0

@DGM A pesar de que uso y me gustan los accesorios, a veces los encuentro difíciles de mantener. –

2

fábricas permiten usted para poner la configuración de prueba en un archivo. Por ejemplo, mi fábrica de proyectos está en spec/support/factories/project_factory.rb.

Si deseo cambiar el título predeterminado o tal vez agregar otro atributo, lo hago en un archivo. Con AR salpicado en todas partes a lo largo de mis pruebas, tendría que cambiar eso en cada instancia de ese uso.

5

fábricas

crea/construye un objeto y luego se utiliza sólo cuando se le solicite en una prueba.

Define la "ruta de acceso feliz" del objeto, incluidas las asociaciones, en un archivo (como se menciona ryan) y luego solo mantenga un archivo para cuando cambien sus asociaciones de esquema/modelo.

Accesorios

imita lo que la base de datos debe ser similar para un solo disco, es cargado en la base de datos de prueba y luego utilizados.

Las luminarias son el estado final del modelo y viven en la base de datos, por lo que se cargan una vez y se pueden usar en las pruebas como mejor le parezca.

Múltiples archivos y usted diseña sus archivos de dispositivos para que se ocupen de cada archivo y asociación.

NewModel.create (...)

se crea una vez y se utiliza una vez en una prueba o en un solo bloque de before(:each)

Si usted tiene 100 de estos bloques, que es la escritura y el mantenimiento de 100 diferentes objetos, por no hablar de las Asociaciones como @user.profile.create(....) 100 veces.

Ventajas de las fábricas más NewModel.create

Un archivo para mantener, en lugar de grepping y reemplazar múltiples build o create en sus líneas de código.

Nota Hay que decir que en mi banco de pruebas que yo quiero que sea pronto como sea posible, así que estoy cayendo factorygirl y el uso de accesorios y NewModel.create avanzar. Solo para ver si lo acelera. Estoy trabajando en la teoría de que FG está ralentizando mi suite, como es let() y before(:each)