Hersteller erzeugen doppelte Namen aufgrund alter lokaler Testdatenbank

Ich habe gerade eine Reihe von Tests mit Fehlern wie diesem erhalten:

ActiveRecord::RecordInvalid:
       Validierung fehlgeschlagen: Name ist bereits vergeben

und es sieht so aus, als wäre das das Problem:

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

Das hat alles bis vor kurzem funktioniert. Ich habe das bei einem anderen Plugin gesehen, an dem ich gearbeitet habe, und ich glaube, ich habe es geschafft, mir selbst einen zufälligen Namen zu geben, aber diese haben, glaube ich, bis gestern funktioniert.

Hat sich etwas geändert oder habe ich versehentlich etwas Dummes gemacht?

EDIT: Mit Hilfe von Claude und dem Discourse Helper Bot habe ich versucht, das obige fab durch Folgendes zu ersetzen:

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

konnte aber nicht ganz herausfinden, wie es geht.

Ich habe dann stattdessen Folgendes verwendet:

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

anstelle des obigen !fab, und dies hat die Anzahl der Fehler von 12 auf 1 reduziert, aber es schlägt immer noch fehl mit:

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

     ActiveRecord::RecordInvalid:
       Validierung fehlgeschlagen: Name ist bereits vergeben

Ich glaube nicht, dass sich seit dem letzten Commit gestern um 10:30 Uhr CDT etwas an diesen Tests geändert hat.

Ich bin zu einem früheren Commit zurückgekehrt und jetzt schlägt es fehl mit:


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

     ActiveRecord::RecordInvalid:
       Validierung fehlgeschlagen: Name ist bereits vergeben

und ich habe es erneut ausgeführt, ohne Änderungen vorzunehmen, und jetzt schlägt es fehl bei:

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

     ActiveRecord::RecordInvalid:
       Validierung fehlgeschlagen: Name ist bereits vergeben

Es scheint also, dass es bei einem Test fehlschlägt, und das zufällig?

1 „Gefällt mir“

Vielleicht ist Ihre lokale Testdatenbank in einem schlechten Zustand? Ich würde versuchen, Folgendes auszuführen:

RAILS_ENV=test bin/rake db:drop db:create db:migrate
3 „Gefällt mir“

OMG. Es waren also tatsächlich Kobolde.

Seltsamerweise hat das erste db:create nicht die Multisite-Datenbank erstellt, aber als ich nur die db:create Rake-Aufgabe allein ausgeführt habe, tat sie es. Und dann war die Migration erfolgreich, und dann hat es einfach funktioniert.

Und @Lilly, du und deine :eyes: bringen mich zum Lachen.

Ich verstehe, also etwas wie, dass ich diese Testdatenbank schon lange hatte und die zufällig generierten Namen mit früheren kollidierten. Das ergibt jetzt Sinn. Ich habe mein Upgrade-Skript (das git pull macht, Code von all-the-plugins aktualisiert, die Ruby-Version prüft und so weiter) geändert, um die Testdatenbank zu löschen, zu erstellen und zu migrieren.

4 „Gefällt mir“

hah. nun, ich habe mir deine Code-Schnipsel angesehen, weil ich ziemlich sicher war, dass es hätte funktionieren sollen, weil:

2 „Gefällt mir“

Theoretisch soll die Testdatenbank nach jedem Testlauf automatisch bereinigt werden. Sie sollte also niemals in diesen Zustand geraten. Aber… wenn Testprozesse irgendwie schlecht beendet werden, denke ich, ist es möglich, dass diese Bereinigung (technisch gesehen die Wiederherstellung eines pg savepoint) übersprungen wird.

Das sollte also kein normaler Vorgang sein. Persönlich würde ich mich nur mit dem Drop/Create/Migrate beschäftigen, wenn ich seltsame Fehler bekomme.

Aber wenn es Ihnen nichts ausmacht zu warten, schadet es nicht, Ihre Testdatenbank regelmäßig neu zu erstellen :+1:

3 „Gefällt mir“

Das ergibt Sinn. Ich liebe ^c.

Ich hasse Warten. Ich werde es auskommentieren und hoffen, dass ich mich erinnere. :slight_smile:

Danke nochmals, dass Sie das herausgefunden haben. Ich war sicher, dass ich verrückt wurde.

2 „Gefällt mir“

Dieses Thema wurde 30 Tage nach der letzten Antwort automatisch geschlossen. Neue Antworten sind nicht mehr möglich.