Les fabricants génèrent des noms en double en raison du vieillissement de la base de données locale de test

J’ai eu un tas de tests qui ont échoué avec des erreurs comme celle-ci :

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

et il semble que ce soit le problème :

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

Tout cela fonctionnait jusqu’à récemment. J’ai vu cela sur un autre plugin sur lequel je travaillais et, je pense, j’ai réussi à définir un nom aléatoire moi-même, mais cela fonctionnait, je crois, hier encore.

Quelque chose a-t-il changé, ou ai-je fait une bêtise par erreur ?

EDIT : Avec l’aide de Claude et du bot d’aide Discourse, j’ai essayé de remplacer le fab ci-dessus par

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

mais je n’ai pas réussi à comprendre comment faire.

J’ai ensuite utilisé

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

au lieu du !fab ci-dessus et cela a réduit le nombre d’échecs de 12 à 1, mais cela échoue toujours avec

  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   

Je ne pense pas que quoi que ce soit autour de ces tests ait changé depuis hier 10h30 CDT, date de mon dernier commit.

J’ai rétabli une version antérieure et maintenant cela échoue avec

                                                                                                                                                       
  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                 

et je l’ai exécuté à nouveau sans rien changer et maintenant cela échoue sur

  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         

Il semble donc que cela échoue sur un test, et que ce soit aléatoire ?

1 « J'aime »

Peut-être que votre base de données de test locale est dans un état incohérent ? J’essaierais d’exécuter :

RAILS_ENV=test bin/rake db:drop db:create db:migrate
3 « J'aime »

OMG. C’était donc bien des gremlins.

Étrangement, le premier db:create n’a pas créé la base de données multisite, mais lorsque j’ai exécuté la tâche db:create seule, elle l’a fait. Ensuite, la migration a réussi, et tout a fonctionné.

Et @Lilly, toi et tes :eyes: me font beaucoup rire.

Je vois, donc quelque chose comme j’avais cette base de données de test depuis longtemps et que les noms générés aléatoirement commençaient à entrer en conflit avec les précédents. Cela a maintenant du sens. J’ai modifié mon script de mise à niveau (qui fait un git pull, rafraîchit le code de all-the-plugins, vérifie la version de ruby, etc.) pour supprimer, créer et migrer la base de données de test.

4 « J'aime »

hah. eh bien, je lorgnais tes extraits de code parce que j’étais à peu près sûr que ça aurait dû fonctionner parce que :

2 « J'aime »

En théorie, la base de données de test est censée être automatiquement nettoyée après chaque exécution de test. Elle ne devrait donc jamais se retrouver dans cet état. Mais… si les processus de test sont mal terminés d’une manière ou d’une autre, je pense qu’il est possible que ce nettoyage (techniquement, la restauration d’un point de sauvegarde pg) soit ignoré.

Cela ne devrait donc pas être une occurrence normale. Personnellement, je ne m’embêterais avec le drop/create/migrate que si je commençais à avoir des échecs étranges.

Mais, si cela ne vous dérange pas d’attendre, il n’y a aucun inconvénient à recréer régulièrement votre base de données de test :+1:

3 « J'aime »

C’est logique. J’adore ^c.

Je déteste attendre. Je vais le commenter et espérer que je m’en souvienne. :slight_smile:

Merci encore d’avoir trouvé cela. J’étais sûr que je devenais fou.

2 « J'aime »

Ce sujet a été automatiquement fermé 30 jours après la dernière réponse. Les nouvelles réponses ne sont plus autorisées.