Von dem, was ich verstehe, glaube ich nicht, dass Transaktionen bei Dämmerung funktionieren können, da jede Browseranfrage in der Abenddämmerung eine separate Instanz Ihrer Laravel-App erstellt.
Zuvor erstellte phpunit eine neue Anwendung im Speicher als Teil des Prozesses (in der setUp
/createApplication
Methode), dann testen Sie gegen diese Testanwendung, dann zerstören Sie es und richten Sie die nächste ein. Daher können die Transaktionen um die Teile der Anwendung herumgetragen und zerstört werden, bevor sie eine neue Datenbankverbindung für den nächsten Test starten.
Mit der Dämmerung, es ist echte Ende-zu-Ende-Tests (einschließlich eines Browsers, gefälschte Benutzerinteraktion, das Routing auf Ihrem lokalen Rechner, etc.), was bedeutet, dass es nicht alle in der Umgebung enthalten ist, dass Ihre Tests ausgeführt werden in, wie sie normalerweise in phpunit sind.
Dämmerung führt die folgende:
- Kopiert
.env.dusk.*
und startet die chromedriver (oder was auch immer Selen-like, was Sie verwenden)
- Löst einen phpunit Shell-Befehl (dh neuer Befehl, neues Verfahren.)
- Der phpunit-Befehl startet Ihre Dämmerungs-Tests, die jeweils ein Browserfenster öffnen und Anfragen stellen (jede Anfrage startet einen neuen php-fpm- und php-Prozess (für nginx)) - genau so, als würden Sie diese Anfragen selbst machen. Jeder von ihnen hat separate Verbindungen zur db und kann daher nicht mit den Transaktionen der anderen interagieren.
Es ist auch erwähnenswert, dass das DatabaseTransactions
Merkmal in der Stiftung Paket ist, nicht die Dämmerung Paket, so ist es nicht bauen/verpackt mit Einbruch der Dunkelheit im Auge behalten.
Dies erklärt auch, warum in-memory sqlite nicht mit Dämmerung funktioniert, da ein Prozess keinen Zugriff auf den Speicher eines anderen Prozesses hat.
Dies führt nur die Datenbankmigrationen aus. Transaktionen werden in der Dämmerung nicht unterstützt, da sie in einem Browser ausgeführt werden. – Christophvh
Schöne Lösung Mann! Ja wirklich :) –