2011-08-21 11 views
5

Estoy usando FactoryGirl para crear un modelo "Especializado" que tiene un índice único en la columna code.Entrada duplicada para el índice con FactoryGirl cuando se ejecutan las pruebas

Cuando creo varias fábricas del modelo "especializado" me sale este error:

Failure/Error: Factory(:specialty) 
Mysql::Error: Duplicate entry 'AN00' for key 'index_specialties_on_code': INSERT INTO `specialties` (`code`, `name`) VALUES ('AN00', 'Name') 
Duplicate entry 'AN00' for key 'index_specialties_on_code' 

¿Cuál es la forma correcta de tratar con esto? ¿Cómo es que el índice asociado con el modelo no se ha borrado con el modelo? Estoy usando DatabaseCleaner.

Respuesta

3

Añadir una secuencia para sus fábricas:

Factory.sequence :code do |n| 
    "AAA#{n}" 
end 

Y en su fábrica de la especialidad usar la secuencia:

Factory.define :specialty do |f| 
    f.code { Factory.next(:code) } 
    # other assignments here 
end 

De esta manera usted siempre tendrá nuevos códigos.

+0

Tengo un cierto número de especialidades. Es bastante probable que no se agreguen más a la base de datos. ¿Debo poner las cosas en un seeds.rb? Si es así, ¿cómo usaría factory girl para asociar especialidades únicas para evitar el mismo error mysql? – maletor

Cuestiones relacionadas