Testen ist für die Webentwicklung unerlässlich. Laravel-Modellfabriken definieren Datenbankdatensätze auf vorhersehbare und leicht reproduzierbare Weise, damit deine App-Tests konsistent und kontrolliert sind. Modellfabriken definieren eine Reihe von Standardattributen für jedes deiner Eloquent-Modelle.

Wenn du zum Beispiel eine Blogging-App entwickelst, mit der Autoren und Moderatoren Kommentare genehmigen können, bevor sie online gehen, musst du testen, ob die Funktion richtig funktioniert, bevor du sie deinen Nutzern zur Verfügung stellst. All das erfordert Testdaten.

Um die oben beschriebene Blogging-App zu testen, brauchst du Kommentardaten, mit denen du die Funktionalität deiner Anwendung imitieren und testen kannst. Mit Laravel kannst du das tun, ohne Kommentare von echten Nutzern zu erhalten, indem du Laravel-Fabriken und Faker verwendest, um gefälschte Daten zu erzeugen.

In diesem Artikel wird erklärt, wie du Kommentardaten ohne Kommentare von echten Nutzern bekommst.

Voraussetzungen

Um dieses Lernprogramm zu absolvieren, musst du mit den folgenden Dingen vertraut sein:

  • XAMPP
  • Composer

XAMPP ist eine kostenlose und einfach zu installierende Apache-Distribution, die PHP, Perl und MariaDB – eine MySQL-Datenbank – enthält. In diesem Tutorial wird die neueste Version, 8.1.10, verwendet, die PHP 8.1.10 installiert. Lies diesen Artikel, wenn du XAMPP für MacOS installierst, oder diese Anleitung für Linux. In diesem Tutorial wird XAMPP unter Windows verwendet.

Der Composer ist ein Tool, mit dem du die Pakete definieren, installieren und herunterladen kannst, auf die deine Web-App in der Entwicklung und Produktion angewiesen ist. In diesem Lernprogramm wird die Version v2.4.4 des Composers verwendet, die PHP Version 7.2+ voraussetzt. Du verwendest Composer, um den Laravel-Installer für diesen Lehrgang zu installieren.

Du kannst auch den kompletten Code für das Projekt herunterladen, um mitzumachen.

Wie du das Projekt einrichtest

In diesem Abschnitt erstellst du ein Laravel-Projekt und verbindest es mit einer Datenbank. Schauen wir uns an, was das alles bedeutet und wie du es schaffst.

Laravel-Installer installieren

Um schnell ein Laravel-Projekt zu erstellen, installiere den Laravel-Installer:

composer global require laravel/installer

Dieser Code installiert den Laravel-Installer global auf deinem Rechner.

Ein Laravel-Projekt erstellen

Als Nächstes erstellst du ein Laravel-Projekt, indem du Folgendes ausführst:

laravel new app-name

Dieser Code bootet ein neues Laravel-Projekt und installiert alle Abhängigkeiten:

Erstellen des Laravel-Projekts
Erstellen des Laravel-Projekts

Eine andere, einfachere Möglichkeit, Laravel zu installieren, ist, Composer direkt zu verwenden.

composer create-project laravel/laravel app-name

Wenn du die obige Methode verwendest, brauchst du den Laravel-Installer nicht zu installieren.

Starte die App

Jetzt kannst du das Verzeichnis in app-name ändern und das Projekt mit Laravels eigenem Kommandozeilen-Tool (CLI) Artisan starten:

php artisan serve

Dieser Code startet das Projekt und verbindet es mit localhost:8000 oder einem anderen verfügbaren Port, wenn Port 8000 in Gebrauch ist. Auf localhost:8000 solltest du etwas wie das hier sehen:

Die Laravel Website Homepage
Laravel

Eine Datenbank erstellen

Um deine App mit einer Datenbank zu verbinden, musst du mit der grafischen Benutzeroberfläche PHPMyAdmin von XAMPP eine neue Datenbank erstellen. Gehe zu localhost/phpmyadmin und klicke in der Seitenleiste auf Neu:

Das Formular
Formular Datenbank erstellen

Das Bild oben zeigt das Formular Datenbank erstellen mit app_name als Datenbankname.

Klicke auf Erstellen, um eine Datenbank zu erstellen.

Bearbeiten der .env-Datei

Um deine App mit einer Datenbank zu verbinden, musst du den DB-Teil der .env-Datei bearbeiten:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=app_name
DB_USERNAME=root
DB_PASSWORD=

Dieser Code füllt die Datenbankzugangsdaten mit deinem Datenbanknamen, Benutzernamen, Port, Passwort und Host. Jetzt kannst du damit beginnen, Fabriken und Modelle zu erstellen.

Hinweis: Ersetze die Werte durch deine Datenbankanmeldedaten. Wenn du die Fehlermeldung „Zugriff für Benutzer verweigert“ erhältst, setze die Werte für DB_USERNAME und DB_PASSWORD in Anführungszeichen.

So generierst du „gefälschte“ Daten

Nachdem du die App erstellt und mit der Datenbank verbunden hast, kannst du nun die notwendigen Dateien erstellen, um falsche Daten in der Datenbank zu erzeugen.

Erstelle das Kommentar-Modell

Erstelle die Modelldatei, die mit den Datenbanktabellen interagiert. Um ein Modell zu erstellen, verwende Artisan:

php artisan make:model Comment

Dieser Code erstellt eine Datei Comment.php im Ordner app/Models mit einigem Boilerplate-Code. Füge den folgenden Code unterhalb der Zeile use HasFactory; ein:

 protected $fillable = [
      'name',
      'email',
      'body',
      'approved',
      'likes'
    ];

Dieser Code listet die Felder auf, die du für Massenzuweisungen zulassen willst, da Laravel deine Datenbank standardmäßig vor Massenzuweisungen schützt. Die Modelldatei Comment sollte nun wie folgt aussehen:

Kommentar-Modelldatei
Kommentar-Modelldatei

Erstellen der Migrationsdatei

Nachdem du die Modelldatei erstellt und das Array $fillable deklariert hast, musst du die Migrationsdatei mit dem folgenden Befehl erstellen:

php artisan make:migration create_comments_table

Hinweis: Die Namenskonvention für die Erstellung von Migrationen in Laravel ist normalerweise snake_caseauch bekannt als underscore_case. Das erste Wort ist die Aktion, das zweite Wort ist der Plural des Modells und das letzte Wort ist das Feature, das im Projekt erstellt wird. Das bedeutet, dass du create_books_table schreibst, wenn du eine Migration für ein Buchmodell erstellst.

Dieser Code erstellt eine Datei namens yyyy_mm_dd_hhmmss_create_comments_table im Ordner database/migrations.

Als nächstes bearbeitest du die Funktion up in yyyy_mm_dd_hhmmss_create_comments_table:

public function up()
    {
  Schema::create('comments', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('email');
    $table->longText('body');
    $table->boolean('approved');
    $table->integer('likes')->default(0);
    $table->timestamps();
    });
    }

Dieser Code erstellt ein Schema, das eine Tabelle mit den Spalten erstellt: id, name, email, body, approved, likes, und timestamps.

Ausführen der Migrationen

Das Erstellen und Bearbeiten der Migrationsdatei bewirkt erst dann etwas, wenn du sie über die Befehlszeile ausführst. Wenn du dir den Datenbankmanager ansiehst, ist er noch leer.

Führe die Migrationen mit Artisan aus:

php artisan migrate

Dieser Befehl führt alle Migrationen innerhalb von database/migrations aus, weil es die erste Migration seit der Erstellung der App ist:

Erfolgreiche Migrationen
Erfolgreiche Migrationen

Das folgende Bild zeigt alle Migrationsdateien, die du ausgeführt hast. Jede steht für eine Tabelle in der Datenbank:

Datenbank nach den Migrationen
Datenbank nach den Migrationen

Erstelle die CommentFactory-Datei

Erstelle eine Fabrikdatei, die deine Definitionsfunktion enthält. Für diese Demonstration erstellst du eine Factory mit Artisan:

php artisan make:factory CommentFactory.php

Dieser Code erstellt eine CommentFactory.php-Datei im Ordner database/factories.

Die Definitionsfunktion

Die Funktion in CommentFactory legt fest, wie Faker gefälschte Daten erzeugt. Bearbeite sie so, dass sie wie folgt aussieht:

public function definition()
  {
   return [
     'name' => $this->faker->name(),
     'email' => $this->faker->email(),
     'body' => $this->faker->sentence(45),
     'approved' => $this->faker->boolean(),
     'likes' => $this->faker->randomNumber(5)
     ];
    }

Dieser Code weist Faker an, Folgendes zu erzeugen:

  • Einen Namen
  • Eine E-Mail Adresse
  • Einen Absatz, der 45 Sätze enthält
  • Einen zugelassenen Wert, der nur wahr oder falsch sein kann
  • Eine Zufallszahl zwischen 0 und 9999

Verbinden des Kommentar-Modells mit der CommentFactory

Verbinde das Modell Comment mit CommentFactory, indem du eine geschützte Variable $model oberhalb der Definition deklarierst:

protected $model = Comment::class;

Füge außerdem die use AppModelsComment; zu den Dateiabhängigkeiten hinzu. Die CommentFactory-Datei sollte nun wie folgt aussehen:

Die CommentFactory-Datei
Die CommentFactory-Datei

Wie wird die Datenbank gefüttert?

Seeding bedeutet in der Programmierung, dass man zu Testzwecken zufällige, gefälschte Daten für eine Datenbank erzeugt.

Nachdem du das Modell erstellt, die Migrationen ausgeführt und die Definition in der CommentFactory erstellt hast, kannst du den Seeder mithilfe der DatabaseSeeder-Datei ausführen.

Erstelle die CommentSeeder-Datei

Erstelle eine Seeder-Datei, die die Factory nutzt, um die Daten zu generieren:

php artisan make:seeder CommentSeeder.php

Dieser Code erstellt eine CommentSeeder.php-Datei im Ordner database/seeders.

Bearbeite die Run-Funktion

Verbinde das Kommentar-Modell mit dem CommentSeeder. Füge den folgenden Code in die Run-Funktion ein:

Comment::factory()->count(50)->create();

Dieser Code weist den CommentSeeder an, das Comment-Modell und die Definitionsfunktion der CommentFactory zu verwenden, um 50 Kommentare in der Datenbank zu erzeugen. Füge außerdem die use AppModelsComment; zu den Dateiabhängigkeiten hinzu. Die CommentSeeder-Datei sollte nun wie folgt aussehen:

CommentSeeder-Datei
CommentSeeder-Datei

Hinweis: Du kannst Faker so konfigurieren, dass er lokale Daten erzeugt. Du kannst zum Beispiel einstellen, dass er italienische Namen anstelle von Zufallsnamen generiert, indem du faker_locale in der Datei app/config.php auf it_IT setzt. Mehr über Faker Locales erfährst du in diesem Leitfaden.

Ausführen des Seeders

Als Nächstes führst du die Seeder-Datei mit Artisan aus:

php artisan db:seed --class=CommentSeeder

Dieser Code führt die Seeder-Datei aus und generiert 50 Zeilen mit gefälschten Daten in der Datenbank.

Datenbank-Seed erfolgreich
Datenbank-Seed erfolgreich

Die Datenbank sollte jetzt 50 Zeilen mit gefälschten Daten enthalten, die du verwenden kannst, um die Funktionen deiner Anwendung zu testen:

50 Datenzeilen in der Datenbank
50 Datenzeilen in der Datenbank

So setzt du die Datenbank zurück

Wenn du die generierten Daten zum Testen verwendest, setze die Datenbank jedes Mal zurück, wenn du einen Test durchführst. Angenommen, du möchtest die Funktion zum Umschalten zwischen genehmigten Kommentaren testen. Aktualisiere die Datenbank nach jedem Test, um sicherzustellen, dass die zuvor generierten Daten zukünftige Tests nicht beeinträchtigen.

RefreshDatabase verwenden

Aktualisiere die Datenbank mit der Eigenschaft RefreshDatabase in der Testdatei.

Navigiere in der Datei ExampleTest.php im Ordner tests/Feature zum Kommentar use IlluminateFoundationTestingRefreshDatabase; und füge die folgende Codezeile oberhalb der Funktion test_the_application_returns_a_successful_response ein:

use RefreshDatabase;

Die Datei ExampleTest.php sollte jetzt wie folgt aussehen:

ExampleTest-Datei
ExampleTest-Datei

Den Test ausführen

Nachdem du die Eigenschaft RefreshDatabase zur Testdatei hinzugefügt hast, führe den Test mit Artisan aus:

php artisan test

Dieser Code führt alle Tests in der App aus und aktualisiert die Datenbank nach den Tests, wie in der folgenden Abbildung zu sehen ist:

Ein erfolgreicher Artisan-Test
Ein erfolgreicher Artisan-Test

Überprüfe nun die Datenbank, um die leere Kommentartabelle zu sehen:

Leere Kommentar-Datenbank
Leere Kommentar-Datenbank

Zusammenfassung

In diesem Artikel wurde beschrieben, wie man ein Laravel-Projekt erstellt, es mit einer Datenbank verbindet und Modelle, Migrations-, Factory- und Seeder-Dateien erstellt und konfiguriert, um Zufallsdaten für die Datenbank zu erzeugen. Außerdem wurde erläutert, wie man die Datenbank nach der Durchführung von Tests zurücksetzt.

Du hast jetzt gesehen, wie du mit Laravel Factories und Faker innerhalb von Minuten eine beliebige Menge an Testdaten erzeugen kannst, um eine Anwendung zu testen oder auch nur als Platzhalter – mit minimaler Konfiguration.

Wenn deine Laravel-Anwendung bereit ist, kannst du sie mit den Application Hosting Services von Kinsta schnell und effizient bereitstellen.

Steve Bonisteel Kinsta

Steve Bonisteel is Technical Editor bij Kinsta. Hij begon zijn schrijverscarrière als verslaggever en achtervolgde ambulances en brandweerwagens. Sinds eind jaren negentig schrijft hij over internetgerelateerde technologie.