Wenn ein Plugin type: group verwendet, muss die Gruppe erstellt sein (z. B. beim Migrationsvorgang der Datenbank oder eventuell in after_initialize), damit die Tests bestehen (ansonsten schlägt der Test fehl, weil die Einstellungen eine Gruppe enthalten, die nicht existiert). Meine Lösung bestand darin, diese type: group-Einstellungen stattdessen als type: text zu definieren. Auf diese Weise scheitern die Einstellungen nicht daran, dass die Gruppe fehlt; ich kann die Gruppen in meinen Tests mit let! erstellen, und die Gruppen sind verschwunden, wenn die Group-Tests ausgeführt werden.
Wenn es einen besseren Weg gibt, würde ich mich sehr über einen Hinweis freuen. In diesem Fall werde ich wahrscheinlich nie ändern müssen, welche Gruppe für welche Zwecke verwendet wird, sodass sie einfach im Plugin hard-codiert und gar keine Einstellungen sein müssten.
Gedankengang, wie ich darauf gekommen bin
Ich habe ein Plugin, das eine Reihe von Gruppen benötigt. Wenn ein Benutzer zur Gruppe hinzugefügt wird, wird eine Aktion in meinem Modell ausgeführt. Das funktioniert einwandfrei in Produktions- und Entwicklungsdatenbanken. Juchhu! ![]()
Das Problem ist, dass bei den Tests entweder die Gruppen erstellt werden (ich habe versucht, dies in einer Funktion zu tun, die in after_initialize aufgerufen wird, oder mit Fixtures, die während der Migration ausgeführt werden), was die Kern-Group-Tests zerstört (die beispielsweise eine bestimmte Anzahl von vorab existierenden Gruppen erwarten), oder die Gruppen werden nicht erstellt, was meine Tests scheitern lässt.
Ich habe refresh_automatic_groups im Group-Modell überschrieben und veranlasst, dass meine Gruppen dabei gelöscht werden. Das hat alle Tests außer einem repariert, da meine Gruppennamen einige enthalten, die bestimmte Zeichenfolgen beinhalten, und dieser Test refresh_automatic_groups nicht aufruft.
Meine Lösung bestand daher darin, nur Namen zu verwenden, die diesen Test nicht brechen.
EDIT (erneut): Aber jetzt habe ich immer noch Fehler in destroy_task_spec.rb und im group_controller.
Gibt es einen einfachen Trick, den ich übersehe, oder muss ich dieses Plugin einfach so anpassen, dass es keine Gruppen automatisch erstellt?