Tipp #6: Fixture rollback
Wenn Du Fixtures nutzt, werden die Fixture-Daten aus der Datenbank entfernt, wenn der jeweilige Test durchgelaufen ist. Was dabei zu beachten ist, ist dass es sich hier nicht um einen Transaktions-Rollback handelt, stattdessen werden alle Tabellen die von der Fixture betroffen waren, geleert (truncated).
Das hat einige Implikationen:
- Man sollte niemals table fixtures mit Tabellen benutzen, die wichtige Core-Daten enthalten, wie z.B.
core_config_data
odereav_attribute
- Daten in Tabellen, die nicht in der Fixture stehen, bleiben bestehen. Man kann das Löschen von Daten, die während dem Test erstellt wurden, mit einer leern Fixture triggern, zum Beispiel für Quotes und Orders:
tables: sales/quote: [] sales/order: []
- Wenn dieses Verhalten nicht erwünscht ist, sollte man hinter sich selbst aufräumen, also erstellte Daten in einer
tearDown
Methode löschen. - Verlass Dich nicht zu sehr auf Daten, die in der Original-Datenbank vorhanden sind, denn andere Tests können sie mit ihren Fixtures überschreiben und schließlich löschen.
- Wenn Du shared fixtures mit
@loadSharedFixture
nutzt, werden alle Daten in den shared fixtures nur einmal erstellt und entfernt. Alle Tabellen, die von einer shared fixture betroffen sind, werden zwischendurch nicht aufgeräumft, auch wenn andere normale Fixtures Daten hinzufügen. Mein Rat: Shared Fixtures nur mit Bedacht einsetzen, besser gar nicht