So erstellen und verwenden Sie gefälschte Datensätze mit Laravel Model Factories
Veröffentlicht: 2023-04-28Tests sind für die Webentwicklung unerlässlich. Laravel-Modellfabriken definieren Datenbankeinträge auf vorhersehbare und leicht reproduzierbare Weise, damit Ihre App-Tests konsistent und kontrolliert sind. Modellfabriken definieren eine Reihe von Standardattributen für jedes Ihrer Eloquent-Modelle.
Wenn Sie beispielsweise eine Blogging-App erstellen, die es Autoren und Moderatoren ermöglicht, Kommentare zu genehmigen, bevor sie live gehen, müssen Sie testen, ob die Funktion ordnungsgemäß funktioniert, bevor Sie sie Ihren Benutzern bereitstellen. All dies erfordert Testdaten.
Um die oben beschriebene Blogging-App zu testen, benötigen Sie Kommentardaten, um die Funktionalität Ihrer Anwendung zu imitieren und zu testen. Mit Laravel können Sie dies tun, ohne Kommentare von tatsächlichen Benutzern zu erhalten, indem Sie Laravel-Fabriken und Faker verwenden, um gefälschte Daten zu generieren.
In diesem Artikel wird erläutert, wie Sie Kommentardaten ohne Kommentare von echten Benutzern erhalten.
Voraussetzungen
Um dieses Lernprogramm abzuschließen, müssen Sie mit Folgendem vertraut sein:
- XAMPP
- Komponist
XAMPP ist eine kostenlose und einfach zu installierende Apache-Distribution, die PHP, Perl und MariaDB – eine MySQL-Datenbank – enthält. Dieses Tutorial verwendet die neueste Version, 8.1.10, die PHP 8.1.10 installiert. Lesen Sie diesen Artikel, wenn Sie XAMPP für MacOS installieren, oder diese Anleitung für Linux. Dieses Tutorial verwendet XAMPP unter Windows.
Composer ist ein Tool, mit dem Sie die Pakete definieren, installieren und herunterladen können, von denen Ihre Webanwendung in der Entwicklung und Produktion abhängt. Dieses Tutorial verwendet Version v2.4.4 von Composer, die PHP-Version 7.2+ erfordert. Sie verwenden Composer, um das Laravel-Installationsprogramm für dieses Tutorial zu installieren.
Sie können auch den vollständigen Code für das Projekt herunterladen, um mitzumachen.
So richten Sie das Projekt ein
In diesem Abschnitt erstellen Sie ein Laravel-Projekt und verbinden es mit einer Datenbank. Werfen wir einen Blick auf alles, was dazugehört und wie man es bewerkstelligt.
Installieren Sie den Laravel-Installer
Um schnell ein Laravel-Projekt zu erstellen, installieren Sie den Laravel-Installer:
composer global require laravel/installer
Dieser Code installiert das Laravel-Installationsprogramm global auf Ihrem Computer.
Erstellen Sie ein Laravel-Projekt
Erstellen Sie als Nächstes ein Laravel-Projekt, indem Sie Folgendes ausführen:
laravel new app-name
Dieser Code bootet ein neues Laravel-Projekt und installiert alle Abhängigkeiten:
Eine weitere einfachere Möglichkeit, Laravel zu installieren, ist die direkte Verwendung von Composer.
composer create-project laravel/laravel app-name
Sie müssen das Laravel-Installationsprogramm nicht installieren, wenn Sie die obige Methode verwenden.
Starten Sie die Anwendung
Sie können jetzt das Verzeichnis in app-name ändern und das Projekt mit Laravels eigenem Befehlszeilenschnittstellen-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 verwendet wird. Auf localhost:8000 sollten Sie so etwas sehen:
Erstellen Sie eine Datenbank
Um Ihre App mit einer Datenbank zu verbinden, müssen Sie mithilfe der grafischen Benutzeroberfläche PHPMyAdmin von XAMPP eine neue Datenbank erstellen. Gehen Sie zu localhost/phpmyadmin und klicken Sie in der Seitenleiste auf Neu :
Das obige Bild zeigt das Formular „Datenbank erstellen“ mit „app_name“ als Datenbankname.
Klicken Sie auf Erstellen , um eine Datenbank zu erstellen.
Bearbeiten Sie die .env-Datei
Um Ihre App mit einer Datenbank zu verbinden, müssen Sie 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 Datenbankanmeldeinformationen mit Ihrem Datenbanknamen, Benutzernamen, Port, Passwort und Host. Sie können jetzt mit dem Erstellen von Fabriken und Modellen beginnen.
Hinweis: Ersetzen Sie die Werte durch Ihre Datenbankanmeldeinformationen. Wenn der Fehler „Zugriff für Benutzer verweigert“ auftritt, setzen Sie außerdem die Werte für DB_USERNAME
und DB_PASSWORD
in doppelte Anführungszeichen.
So generieren Sie gefälschte Daten
Nachdem Sie die App erstellt und mit der Datenbank verbunden haben, können Sie nun die erforderlichen Dateien erstellen, um gefälschte Daten in der Datenbank zu generieren.
Erstellen Sie das Kommentarmodell
Erstellen Sie die Modelldatei für die Interaktion mit den Datenbanktabellen. Um ein Modell zu erstellen, verwenden Sie Artisan:
php artisan make:model Comment
Dieser Code erstellt eine Datei „Comment.php“ im Ordner „app/Models“ mit einigem Boilerplate-Code. Fügen Sie den folgenden Code unterhalb von use HasFactory;
Linie:
protected $fillable = [ 'name', 'email', 'body', 'approved', 'likes' ];
Dieser Code listet die Felder auf, für die Sie Massenzuweisungen zulassen möchten, da Laravel Ihre Datenbank standardmäßig vor Massenzuweisungen schützt. Die Comment- Modelldatei sollte nun so aussehen:
Erstellen Sie die Migrationsdatei
Nachdem Sie die Modelldatei erstellt und das $fillable
-Array deklariert haben, müssen Sie die Migrationsdatei mit dem folgenden Befehl erstellen:
php artisan make:migration create_comments_table
Hinweis: Die Namenskonvention zum Erstellen von Migrationen in Laravel ist normalerweise snake_case
, auch bekannt als underscore_case
. Das erste Wort ist die Aktion, das zweite Wort ist ein Plural des Modells und das letzte Wort ist das Feature, das innerhalb des Projekts erstellt wird. Das bedeutet, dass Sie create_books_table
schreiben, wenn Sie eine Migration für ein Book-Modell erstellen.
Dieser Code erstellt eine Datei namens yyyy_mm_dd_hhmmss_create_comments_table im Ordner database/migrations .
Bearbeiten Sie als Nächstes 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
.
Führen Sie die Migrationen aus
Das Erstellen und Bearbeiten der Migrationsdatei wird nichts bewirken, bis Sie sie über die Befehlszeile ausführen. Wenn Sie sich den Datenbankmanager ansehen, ist er noch leer.
Führen Sie die Migrationen mit Artisan aus:
php artisan migrate
Dieser Befehl führt alle Migrationen innerhalb von database/migrations aus, da es die erste Migration seit dem Erstellen der App ist:
Das folgende Bild zeigt alle Migrationsdateien, die Sie ausgeführt haben. Jeder stellt eine Tabelle in der Datenbank dar:
Erstellen Sie die CommentFactory-Datei
Erstellen Sie eine Factory-Datei, die Ihre Definitionsfunktion enthält. Für diese Demonstration erstellen Sie eine Fabrik mit Artisan:
php artisan make:factory CommentFactory.php
Dieser Code erstellt eine CommentFactory .php- Datei im Ordner database/factorys .
Die Definitionsfunktion
Die Funktion in CommentFactory definiert, wie Faker gefälschte Daten generiert. Bearbeiten Sie es so, dass es so 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 generieren:
- Ein Name
- Eine E-Mail Adresse
- Ein Absatz, der 45 Sätze enthält
- Ein zugelassener Wert, der nur wahr oder falsch sein kann
- Eine Zufallszahl zwischen 0 und 9999
Verbinden Sie das Kommentarmodell mit CommentFactory
Verknüpfen Sie das Comment
Modell mit CommentFactory
, indem Sie eine geschützte $model
Variable über der Definition deklarieren:
protected $model = Comment::class;
Fügen Sie außerdem die use App\Models\Comment;
zu den Dateiabhängigkeiten. Die CommentFactory- Datei sollte nun so aussehen:
Wie man die Datenbank sät
Seeding in der Programmierung bedeutet, zufällige gefälschte Daten für eine Datenbank zu Testzwecken zu generieren.
Nachdem Sie nun das Modell erstellt, Migrationen ausgeführt und die Definition in CommentFactory erstellt haben, führen Sie den Seeder mit der DatabaseSeeder- Datei aus.
Erstellen Sie die CommentSeeder-Datei
Erstellen Sie eine Seeder- Datei, die Factory zum Generieren der Daten verwendet:
php artisan make:seeder CommentSeeder.php
Dieser Code erstellt eine CommentSeeder -.php- Datei im Ordner database/seeders .
Bearbeiten Sie die Run-Funktion
Verbinden Sie das Kommentarmodell mit dem CommentSeeder. Fügen Sie 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 von CommentFactory zu verwenden, um 50 Kommentare in der Datenbank zu generieren. Fügen Sie außerdem die use App\Models\Comment;
zu den Dateiabhängigkeiten. Die CommentSeeder- Datei sollte nun so aussehen:
Hinweis: Sie können Faker so konfigurieren, dass lokale Daten erstellt werden. Sie können es beispielsweise so einstellen, dass italienische Namen anstelle von zufälligen Namen generiert werden, indem Sie faker_locale
in der Datei app/config.php auf it_IT
setzen. Weitere Informationen zu Faker Locales finden Sie in diesem Handbuch.
Führen Sie den Seeder aus
Führen Sie als Nächstes 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.
Die Datenbank sollte jetzt 50 Zeilen mit gefälschten Daten enthalten, mit denen Sie die Funktionen Ihrer Anwendung testen können:
So setzen Sie die Datenbank zurück
Wenn Sie die generierten Daten zum Testen verwenden, setzen Sie die Datenbank jedes Mal zurück, wenn Sie einen Test ausführen. Angenommen, Sie möchten die Funktion zum Umschalten von genehmigten Kommentaren testen. Aktualisieren Sie die Datenbank nach jedem Test, um sicherzustellen, dass die zuvor generierten Daten zukünftige Tests nicht beeinträchtigen.
Verwenden Sie RefreshDatabase
Aktualisieren Sie die Datenbank mithilfe der RefreshDatabase
Eigenschaft in der Testdatei .
Navigieren Sie zu ExampleTest.php im Ordner tests/Feature zum Kommentar use Illuminate\Foundation\Testing\RefreshDatabase;
und fügen Sie die folgende Codezeile über der Funktion test_the_application_returns_a_successful_response
hinzu:
use RefreshDatabase;
Die Datei ExampleTest.php sollte nun so aussehen:
Führen Sie den Test aus
Nachdem Sie der Testdatei das Merkmal RefreshDatabase
hinzugefügt haben, führen Sie 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 im folgenden Bild gezeigt:
Überprüfen Sie nun die Datenbank, um die leere Kommentartabelle zu sehen:
Zusammenfassung
In diesem Artikel wurde beschrieben, wie Sie ein Laravel-Projekt erstellen, es mit einer Datenbank verbinden und Modelle, Migrations-, Factory- und Seeder-Dateien erstellen und konfigurieren, um zufällige Daten für die Datenbank zu generieren. Außerdem wurde erläutert, wie die Datenbank nach dem Ausführen von Tests zurückgesetzt wird.
Sie haben jetzt gesehen, wie Laravel Factories und Faker es einfach machen, innerhalb von Minuten eine beliebige Menge an Testdaten zum Testen einer Anwendung oder sogar als Platzhalter zu generieren – mit minimaler Konfiguration.
Wenn deine Laravel-App einsatzbereit ist, kannst du dies schnell und effizient auf den Anwendungs-Hosting-Diensten von Kinsta tun.