I produttori generano nomi duplicati a causa dell'invecchiamento del database di test locale

Ho appena riscontrato diversi test falliti con errori come questo:

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

e sembra che questo sia il problema:

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

Tutto questo funzionava fino a poco tempo fa. Ho visto questo su un altro plugin su cui stavo lavorando e, credo, sono riuscito a impostare un nome casuale da solo, ma questi funzionavano, credo, fino a ieri.

È cambiato qualcosa, o ho fatto qualcosa di sciocco per errore?

EDIT: Con l’aiuto di Claude e del Discourse Helper Bot, ho provato a sostituire il fab sopra con

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

ma non sono riuscito a capire bene come fare.

Poi ho usato

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

invece del !fab sopra e questo ha ridotto il numero di fallimenti da 12 a 1, ma sta ancora fallendo 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

Non credo che nulla intorno a questi test sia cambiato da ieri alle 10:30 AM CDT, quando ho fatto l’ultimo commit.

Sono tornato a un commit precedente e ora fallisce 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

e l’ho eseguito di nuovo senza apportare modifiche e ora fallisce su

  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

Quindi sembra che stia fallendo su un test, ed è casuale?

1 Mi Piace

Forse il tuo database di test locale è entrato in uno stato non valido? Proverei a eseguire:

RAILS_ENV=test bin/rake db:drop db:create db:migrate
3 Mi Piace

OMG. Erano proprio dei gremlin.

Stranamente, il primo db:create non ha creato il database multisito, ma quando ho eseguito da solo il task rake db:create lo ha fatto. E poi la migrazione è riuscita, e poi ha funzionato e basta.

E @Lilly tu e i tuoi :eyes: mi fate morire dal ridere.

Capisco, quindi qualcosa del tipo che avevo quel database di test da molto tempo e i nomi generati casualmente hanno iniziato a scontrarsi con quelli precedenti. Ora ha senso. Ho cambiato il mio script di aggiornamento (che fa un git pull, aggiorna il codice da all-the-plugins, controlla la versione di ruby e così via) per eliminare, creare e migrare il database di test.

4 Mi Piace

hah. beh, stavo scrutando i tuoi snippet di codice perché ero abbastanza sicuro che avrebbe dovuto funzionare perché:

2 Mi Piace

In teoria, il database di test dovrebbe essere ripulito automaticamente dopo ogni esecuzione del test. Quindi non dovrebbe mai arrivare in questo stato. Ma… se i processi di test vengono terminati in modo errato in qualche modo, penso sia possibile che tale pulizia (tecnicamente, il ripristino di un savepoint pg) venga saltata.

Quindi, questo non dovrebbe essere un evento normale. Personalmente, mi preoccuperei di eseguire drop/create/migrate solo se iniziassi a ricevere strani errori.

Ma, se ti va bene l’attesa, non c’è nessun danno nel ricreare regolarmente il tuo database di test :+1:

3 Mi Piace

Ha senso. Adoro ^c.

Odio aspettare. Lo commenterò e spero di ricordarmene. :slight_smile:

Grazie ancora per aver capito. Ero sicuro di stare impazzendo.

2 Mi Piace

Questo argomento è stato chiuso automaticamente 30 giorni dopo l’ultima risposta. Non sono più consentite nuove risposte.