Fabricantes generan nombres duplicados debido a una base de datos de pruebas local obsoleta

He tenido un montón de pruebas fallidas con errores como este:

ActiveRecord::RecordInvalid:
       Validation failed: Name has already been taken

y parece que este es el problema:

  fab!(:the_group) { Fabricate(:group) }

Todos estos funcionaron hasta hace poco. Vi esto en otro plugin en el que estaba trabajando y, creo, me las arreglé para poner un nombre aleatorio yo mismo, pero estos funcionaron, creo, hasta ayer.

¿Ha cambiado algo o he hecho algo tonto por error?

EDITAR: Con la ayuda de Claude y el Bot de Ayuda de Discourse, intenté reemplazar el fab anterior con

  Fabricator(:the_group) do
    name { sequence(:group_name) { |i| "Test Group #{i}" } }
  end

pero no pude descifrarlo del todo.

Luego usé

  let(:the_group) { Fabricate(:group) }

en lugar del !fab anterior y esto ha reducido el número de fallos de 12 a 1, pero todavía falla con

  1) Pfaffmanager::ServersController servers admin can get servers owned by a group
     Failure/Error: let(:the_group) { Fabricate(:group) }

     ActiveRecord::RecordInvalid:
       Validation failed: Name has already been taken

No creo que nada alrededor de estas pruebas haya cambiado desde ayer a las 10:30 AM CDT, cuando hice el último commit.

Revertí a un commit anterior y ahora falla con


  1) Pfaffmanager::ServersController servers includes groups that the user is in
     Failure/Error: let(:the_group) { Fabricate(:group) }

     ActiveRecord::RecordInvalid:
       Validation failed: Name has already been taken

y lo ejecuté de nuevo sin hacer ningún cambio y ahora falla en


  1) Pfaffmanager::ServersController servers can update group id if group owner
     Failure/Error: let(:the_group) { Fabricate(:group) }

     ActiveRecord::RecordInvalid:
       Validation failed: Name has already been taken

Así que parece que está fallando en una prueba, ¿y es aleatorio?

1 me gusta

¿Quizás tu base de datos de prueba local entró en un estado incorrecto? Intentaría ejecutar:

RAILS_ENV=test bin/rake db:drop db:create db:migrate
3 Me gusta

OMG. Así que, de hecho, eran gremlins.

Curiosamente, el primer db:create no creó la base de datos multisitio, pero cuando ejecuté la tarea rake db:create por sí sola, sí lo hizo. Y luego la migración tuvo éxito, y luego funcionó.

Y @Lilly, tú y tus :eyes: me hacen reír mucho.

Ya veo, así que algo como que había tenido esa base de datos de prueba durante mucho tiempo y los nombres generados aleatoriamente comenzaron a chocar con los anteriores. Eso ahora tiene sentido. Cambié mi script de actualización (que hace un git pull, actualiza el código de all-the-plugins, verifica la versión de ruby y demás) para eliminar, crear y migrar la base de datos de prueba.

4 Me gusta

ja. bueno, estaba mirando tus fragmentos de código porque estaba bastante seguro de que debería haber funcionado porque:

2 Me gusta

En teoría, la base de datos de prueba debería limpiarse automáticamente después de cada ejecución de prueba. Por lo tanto, nunca debería terminar en este estado. Pero… si los procesos de prueba se terminan mal de alguna manera, creo que es posible que se omita esa limpieza (técnicamente, la restauración de un punto de guardado de pg).

Así que esto no debería ser algo normal. Personalmente, solo me molestaría con el drop/create/migrate si empiezo a tener fallos extraños.

Pero, si no te importa la espera, no hay problema en recrear tu base de datos de prueba regularmente :+1:

3 Me gusta

Tiene sentido. Me encanta ^c.

Odio esperar. Lo comentaré y espero recordarlo. :slight_smile:

Gracias de nuevo por descubrir esto. Estaba seguro de que me estaba volviendo loco.

2 Me gusta

Este tema se cerró automáticamente 30 días después de la última respuesta. Ya no se permiten nuevas respuestas.