2012-03-30 8 views
22

Estoy perplejo. Tengo una aplicación de rieles (3.1.3) que he estado construyendo donde recientemente agregué el diseño (2.0) para crear un modelo de usuario y la autenticación correspondiente que viene con él. Después de que instalé ideé y ejecuté prueba de rastrillo, TODAS mis pruebas arrojaron el mismo error. A través de ambas pruebas funcionales unidad y me dio un error que se ve así:Devise rompió todas mis pruebas - ActiveRecord :: RecordNotUnique PG :: Error

ERROR should get index (0.05s) 
     ActiveRecord::RecordNotUnique: PG::Error: ERROR: duplicate key value violates unique constraint "index_users_on_email" 
DETAIL: Key (email)=() already exists. 
: INSERT INTO "users" ("created_at", "updated_at", "id") VALUES ('2012-03-30 04:13:13', '2012-03-30 04:13:13', 298486374) 
     /Users/myname/.rvm/gems/[email protected]/gems/activerecord-3.1.3/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `async_exec' 

No entiendo por qué esto afectaría a todos los de mis pruebas, o lo que podría ser la causa. ¿Alguien ha visto algo así antes? ¿Qué estoy haciendo mal aquí?

Cualquier consejo/ayuda sería muy apreciada!

Gracias!

+0

¿Su modelo de usuario tiene actualmente una columna/campo de correo electrónico? – kafuchau

+0

refiérase aquí https://github.com/plataformatec/devise/issues/1356 y https://github.com/norman/friendly_id/issues/152 –

+4

Gracias por pesar aquí chicos - Me acabo de dar cuenta de esto. El problema estaba relacionado con los datos de la prueba que se incluyeron automáticamente en los dispositivos ... no se proporcionó ningún correo electrónico, lo que estaba causando el problema –

Respuesta

1

Devise espera una columna de correo electrónico única y está tratando de salvar a más de un usuario con email = nil. Verifique los accesorios de su prueba, probablemente se haya olvidado de configurar un correo electrónico para los usuarios de su dispositivo.

+0

oops. acabo de ver los comentarios. me alegro de que lo hayas descifrado. –

32

Por si alguien llega a esta pregunta, la respuesta fue proporcionada por Cam Norgate en un comentario.

El problema radica en el archivo test/fixtures/users.yml

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

Se attemting para crear dos usuarios vacíos (uno y dos), sin correo electrónico. Solo ponga un comentario antes de las dos líneas sin comentar.

1

Este error puede ocurrir por varias razones. Ayuda a mirar la traza inversa completa de PG :: Error: ERROR, verá algún código de aplicación/lib que debería estar causando este error, para su caso de uso específico.

En mi caso fue porque estaba mezclando mis ayudantes de inicio de sesión/cierre de sesión con mi propio cierre de sesión personalizado a través de capybara (haga clic en "cerrar sesión") ayudantes en mi suite de especificaciones. ¡Entonces, ideó algunos métodos para actualizar los campos de usuario a través de update_tracked_fields! y en ese momento debe haber creado un usuario vacío intentado guardar.

Dado que se trata de ayudantes de especificación (usando warden/rack, etc.) sucedió fuera del flujo de mi aplicación de rieles, por lo que explico por qué recibí un error en bruto en lugar de alcanzar las validaciones de mi modelo.

Cuestiones relacionadas