2011-01-06 17 views
9

¿Hay alguna manera simple en la fábrica de crear una nueva fábrica solo si todavía no existe?Newbie de Factory Girl: Cómo crear un nuevo registro solo si ya no existe

Si no hay una manera simple, ¿cuál es el medio más conciso para garantizar que solo se cree una fábrica para un conjunto de características de pepino (y/o especificaciones)?

Por ejemplo, necesito un único registro de administrador (común) en un modelo de "usuario" para probar varias características de pepino. Idealmente, me gustaría hacerlo sin ajustar los condicionales en cada paso de creación de administrador, pero sin tocar el error "el registro ya existe".

Cualquier sugerencia apreciada.

+1

Qué quiere decir 'crear una nueva instancia' en lugar de 'crear una nueva fábrica'? Una fábrica crea instancias. –

Respuesta

8

Crea un método de ayuda para crear o devolver una instancia singleton.

 
def create_or_return_admin_user 
    @user ||= Factory(:user, :admin => true) 
end 

y luego llamar

create_or_return_admin_user

en su prueba.

2

No puede hacer eso solo en Factory_girl, necesita crear un método que compruebe si el registro existe o si no está en su base de datos.

Si lo hace en la configuración (antes de Rspec) puede estar seguro de que solo hay un registro.

1

Hemos implementado de esta manera:

En pepino se ejecuta el escenario de 'fondo' antes de cada 'escenario' en el archivo de función. Entonces, en la parte superior de cada archivo de características (en el 'fondo') configuramos un usuario y le otorgamos al usuario el rol de administrador.

Ahora, esto le proporciona un usuario administrador listo y disponible en cada 'escenario'.

Tenga en cuenta que este usuario administrador no sobrevivirá en la función de base de datos a db, ya que Cucumber está gestionando registros en las transacciones. Por lo tanto, si necesita agregar algo a este usuario administrador en una función y usarlo desde otra función, esta forma de hacerlo no es utilizable. Pero como entendí su pregunta, solo quiere asegurarse de que no intente crear el usuario administrador si ya está creado. La creación del usuario administrador en el 'fondo' asegura que solo se crea una vez para cada función.

Tenga en cuenta que en su lugar podría crear el usuario administrador en cada 'escenario'. Cucumber lo eliminará de la base de datos al final del 'escenario', por lo que en cualquier punto, solo tendrás un usuario administrador. Sin embargo, esto no es SECO y no debe hacerse (a menos que solo necesite el usuario administrador en algunos 'escenarios', y específicamente exija que no esté presente en otros 'escenarios').

pepino 'fondo' ejemplo utilizando definición de paso factorygirl: definición

Background: 
    Given the following user exists: 
    | Name | Role   | 
    | Admin | Administrator | 

fábrica:

factory :user do 
    name 'John Doe' 
    role 'Guest' 
end 
Cuestiones relacionadas