Zum Inhalt springen

Cookies 🍪

Cookies helfen uns, Ihnen als Nutzer in Zukunft bessere Informationen und eine verbesserte Benutzererfahrung zu bieten. Details

Projektanfrage

Sprechen wir ganz unverbindlich über Ihr Projekt.

Oder nutzen Sie unser Kontaktformular
Tooling
Laravel

ddev um eine zweite lokale Datenbank für Tests ergänzen


Die Verwendung einer in-memory SQLite-Datenbank für PHPUnit und Pest Tests ist gängige Praxis. Allerdings stößt SQLite bei größeren oder langfristigen Projekten an seine Grenzen, insbesondere wenn es um bestimmte Datenbankoperationen wie dropColumn() oder das sortieren von Spalten geht. SQLite unterstützt diese spezifischen Operationen nicht.

Solange es geht, nutze ich SQLite, aber ab einem gewissen Zeitpunkt wird das unmöglich. Wer DDEV verwendet, kann das Problem leicht umgehen indem er eine zweite MySql Datenbank in den Container hängt.

Erstellen einer zusätzlichen Datenbank

Platzieren Sie im Verzeichnis .ddev/commands/web/ die Datei create_testing_database.sh

echo "Create testing mysql database and grant all permissions to db user"

mysql -hdb -uroot -proot -e "CREATE DATABASE IF NOT EXISTS testing;"
mysql -hdb -uroot -proot -e "GRANT ALL ON *.* TO 'db'@'%';"

Um dieses Script bei jedem Start des Contains auszuführen, ergänzen wir einen Hook in der DDEV-Konfigurationsdatei .ddev/config.yaml. Fügen Sie dort folgenden Abschnitt hinzu:

hooks:
  post-start:
    - exec: "/var/www/html/.ddev/commands/web/create_testing_database.sh"

Integration der neuen Datenbank in PHPUnit oder Pest

Sobald die zweite Datenbank in DDEV eingerichtet ist, besteht der nächste Schritt darin, sie in Ihren PHPUnit- oder Pest-Tests zu verwenden. Hierfür müssen Sie die Konfigurationsdateien dieser Test-Frameworks anpassen oder ein testing-Environment erstellen.

PHPUnit- und Pest-Konfiguration

In der phpunit.xml Datei ändern Sie die Datenbank-Einstellungen. Stellen Sie sicher, dass die Verbindungsdaten auf Ihre neue Testdatenbank und den spezifischen Port verweisen. Ein Beispielabschnitt könnte so aussehen:

<php>
    <env name="DB_CONNECTION" value="mysql"/>
    <env name="DB_HOST" value="db"/>
    <env name="DB_PORT" value="3307"/>
    <env name="DB_DATABASE" value="testing"/>
    <env name="DB_USERNAME" value="db"/>
    <env name="DB_PASSWORD" value="db"/>
</php>

Die neue testing Datenbank kann nun auch über den DB-Client der Wahl aufgerufen werden:

ddev testing database.

Bereit zu starten?

Sie benötigen individuelle Software um Ihre Prozesse zu beschleunigen oder Ihr Unternehmen zu digitalisieren? Dann sollten wir miteinander sprechen.

Termin vereinbaren Zum Kontaktformular