2011-04-24 8 views
24

Soy nuevo para idear y rieles y acabo de inventar integrado con mi aplicación de ejemplo. Lo que he notado es después de crear un modelo de usuario , todas mis pruebas unitarias estaban fallando. Fui a tratar de reducir esto y encontré que incluso la aserción generada uno 'la verdad' para user_test.rb también falla:índice añadiendo al correo electrónico culpable columna para pruebas de unidad en su defecto

ActiveRecord::RecordNotUnique: SQLite3::ConstraintException: \ 
    column email is not unique: INSERT INTO "users" (... 

Una vez le comenté a cabo la add_index ...

# add_index :users, :email, :unique => true 

... y vuelva a ejecutar rake db:test:load y vuelva a ejecutar las pruebas con ruby -I test test/unit/user_test.rb que pase.

Alguien más experiencia de esto?

Respuesta

1

El fracaso tendría que estar sucediendo en la configuración de la prueba, antes de la prueba real. Probablemente estés intentando configurar usuarios con direcciones de correo electrónico idénticas, ya sea a través de accesorios o fábricas.

Si está utilizando accesorios, asegúrese de que cada usuario se le asigna una dirección de correo electrónico diferente. Si está utilizando fábricas, use una secuencia para generar direcciones de correo electrónico únicas para cada usuario que se crea.

+0

HI Steve, este no es el caso con los datos del accesorio duplicados. Estoy usando fábricas (con la secuencia en el correo electrónico) pero para este modelo de Usuarios en particular, que se genera para Devise, solo estoy probando el caso de prueba "afirmar la verdad", que siempre debería ser cierto. no hay datos de accesorios ni nada. Limpié mi base de datos, me aseguré de actualizar schema.rb haciendo rake db: migrar y eliminar la base de datos de prueba y volver a hacer la prueba desde cero. Sospecho que hay algún error al agregar pruebas de índice y unidad, pero aún no me enteré de ese agujero de conejo. – glory

+1

sql generado parece ser (w/values ​​en instrucción de inserción) incorrecto: ActiveRecord :: RecordNotUnique: SQLite3 :: ConstraintException: la columna de correo electrónico no es única: INSE RT INTO "usuarios" ("created_at", "updated_at", "id ") VALORES ('2011-04-24 08:53:36', '2011-04-24 08:53:36', 298486374) – glory

55

Si acaba de generar el modelo legado, un accesorio también se generó con más o menos este contenido:

one: {} 
# column: value 
# 
two: {} 
# column: value 

Este accesorio trata de crear dos usuarios, con el mismo correo electrónico (inexistente). Reemplazarlo por:

one: 
    email: [email protected] 

two: 
    email: [email protected] 

Será corregir este error.

+0

gracias Geal, tengo un seguimiento lateral, pero me di cuenta del mismo problema en este momento. ¡Gracias! – glory

+0

Recibo este otro error ActiveRecord :: StatementInvalid: SQLite3 :: SQLException: no hay ninguna tabla para todas mis pruebas. Después de eliminar el archivo del dispositivo del usuario o deshabilitar los accesorios: todos en el asistente de prueba, pude superar estos errores. No estoy seguro de por qué sucede esto. Me las arreglaré por ahora. – glory

+0

parece que no inició las migraciones de la base de datos –

Cuestiones relacionadas