Comment générer et utiliser de faux enregistrements avec les usines de modèles Laravel
Publié: 2023-04-28Les tests sont essentiels au développement Web. Les usines de modèles Laravel définissent les enregistrements de base de données de manière prévisible et facilement reproductible afin que vos tests d'application soient cohérents et contrôlés. Les fabriques de modèles définissent un ensemble d'attributs par défaut pour chacun de vos modèles Eloquent.
Par exemple, si vous créez une application de blog permettant aux auteurs et aux modérateurs d'approuver les commentaires avant leur mise en ligne, vous devez tester si la fonction fonctionne correctement avant de la déployer auprès de vos utilisateurs. Tout cela nécessite des données de test.
Pour tester l'application de blog décrite ci-dessus, vous avez besoin de données de commentaires pour imiter et tester les fonctionnalités de votre application. Laravel vous permet de le faire sans recevoir de commentaires d'utilisateurs réels en utilisant les usines Laravel et Faker pour générer de fausses données.
Cet article explique comment obtenir des données de commentaires sans commentaires d'utilisateurs réels.
Conditions préalables
Pour suivre ce didacticiel, vous devez connaître les éléments suivants :
- XAMPP
- Compositeur
XAMPP est une distribution Apache gratuite et facile à installer qui contient PHP, Perl et MariaDB - une base de données MySQL. Ce tutoriel utilise la dernière version, 8.1.10, qui installe PHP 8.1.10. Lisez cet article si vous installez XAMPP pour MacOS ou ce guide pour Linux. Ce tutoriel utilise XAMPP sous Windows.
Composer est un outil qui vous permet de définir, d'installer et de télécharger les packages dont dépend votre application Web en développement et en production. Ce tutoriel utilise la version v2.4.4 de Composer, qui nécessite PHP version 7.2+. Vous utilisez Composer pour installer le programme d'installation de Laravel pour ce tutoriel.
Vous pouvez également télécharger le code complet du projet à suivre.
Comment configurer le projet
Dans cette section, vous allez créer un projet Laravel et le connecter à une base de données. Jetons un coup d'œil à tout ce que cela implique et comment y parvenir.
Installer le programme d'installation de Laravel
Pour créer un projet Laravel rapidement, installez le programme d'installation Laravel :
composer global require laravel/installer
Ce code installe le programme d'installation de Laravel globalement sur votre machine.
Créer un projet Laravel
Ensuite, créez un projet Laravel en exécutant ce qui suit :
laravel new app-name
Ce code démarre un nouveau projet Laravel et installe toutes les dépendances :
Un autre moyen plus simple d'installer Laravel consiste à utiliser directement Composer.
composer create-project laravel/laravel app-name
Vous n'avez pas besoin d'installer le programme d'installation de Laravel lorsque vous utilisez la méthode ci-dessus.
Démarrer l'application
Vous pouvez maintenant modifier le répertoire en app-name et démarrer le projet à l'aide de l'outil d'interface de ligne de commande (CLI) de Laravel, Artisan :
php artisan serve
Ce code démarre le projet et le connecte à localhost:8000 ou à tout autre port disponible si le port 8000 est utilisé. Sur localhost:8000, vous devriez voir quelque chose comme ceci :
Créer une base de données
Pour connecter votre application à une base de données, vous devez créer une nouvelle base de données à l'aide de l'interface utilisateur graphique PHPMyAdmin de XAMPP. Accédez à localhost/phpmyadmin et cliquez sur Nouveau dans la barre latérale :
L'image ci-dessus montre le formulaire Créer une base de données avec app_name comme nom de base de données.
Cliquez sur Créer pour créer une base de données.
Modifier le fichier .env
Pour connecter votre application à une base de données, vous devez modifier la partie DB du fichier .env :
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=app_name DB_USERNAME=root DB_PASSWORD=
Ce code remplit les informations d'identification de la base de données avec votre nom de base de données, votre nom d'utilisateur, votre port, votre mot de passe et votre hôte. Vous êtes maintenant prêt à commencer à créer des usines et des modèles.
Remarque : Remplacez les valeurs par les informations d'identification de votre base de données. De plus, si vous rencontrez l'erreur "Accès refusé pour l'utilisateur", placez les valeurs de DB_USERNAME
et DB_PASSWORD
entre guillemets.
Comment générer de fausses données
Après avoir créé l'application et l'avoir connectée à la base de données, vous pouvez maintenant créer les fichiers nécessaires pour générer de fausses données dans la base de données.
Créer le modèle de commentaire
Créez le fichier de modèle pour interagir avec les tables de la base de données. Pour créer un modèle, utilisez Artisan :
php artisan make:model Comment
Ce code crée un fichier Comment.php dans le dossier app/M odels avec du code passe-partout. Ajoutez le code suivant sous use HasFactory;
doubler:
protected $fillable = [ 'name', 'email', 'body', 'approved', 'likes' ];
Ce code répertorie les champs que vous souhaitez autoriser les affectations en masse car Laravel protège votre base de données des affectations en masse par défaut. Le fichier de modèle de commentaire devrait maintenant ressembler à ceci :
Créer le fichier de migration
Après avoir créé le fichier de modèle et déclaré le tableau $fillable
, vous devez créer le fichier de migration à l'aide de la commande ci-dessous :
php artisan make:migration create_comments_table
Remarque : La convention de dénomination pour la création de migrations dans Laravel est généralement snake_case
, également connue sous le nom de underscore_case
. Le premier mot est l'action, le deuxième mot est un pluriel du modèle et le dernier mot est la fonctionnalité qui est créée dans le projet. Cela signifie que vous écrirez create_books_table
lors de la création d'une migration pour un modèle Book.
Ce code crée un fichier nommé yyyy_mm_dd_hhmmss_create_comments_table dans le dossier database/migrations .
Ensuite, modifiez la fonction up dans 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(); }); }
Ce code crée un schéma qui crée une table avec les colonnes : id
, name
, email
, body
, approved
, likes
et timestamps
.
Exécutez les migrations
La création et la modification du fichier de migrations ne feront rien tant que vous ne les exécuterez pas à l'aide de la ligne de commande. Si vous regardez le gestionnaire de base de données, il est toujours vide.
Exécutez les migrations à l'aide d'Artisan :
php artisan migrate
Cette commande exécute toutes les migrations dans database/migrations car il s'agit de la première migration depuis la création de l'application :
L'image suivante montre tous les fichiers de migration que vous avez exécutés. Chacun représente une table dans la base de données :
Créer le fichier CommentFactory
Créez un fichier d'usine contenant votre fonction de définition. Pour cette démonstration, vous allez créer une usine à l'aide d'Artisan :
php artisan make:factory CommentFactory.php
Ce code crée un fichier CommentFactory .php dans le dossier database/factories .
La fonction de définition
La fonction à l'intérieur de CommentFactory définit comment Faker génère de fausses données. Modifiez-le pour qu'il ressemble à ceci :
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) ]; }
Ce code indique à Faker de générer ce qui suit :
- Un nom
- Une adresse e-mail
- Un paragraphe qui contient 45 phrases
- Une valeur approuvée qui ne peut être que vraie ou fausse
- Un nombre aléatoire entre 0 et 9999
Connectez le modèle de commentaire à CommentFactory
Liez le modèle Comment
à CommentFactory
en déclarant une variable $model
protégée au-dessus de la définition :
protected $model = Comment::class;
Ajoutez également la use App\Models\Comment;
aux dépendances de fichiers. Le fichier CommentFactory devrait maintenant ressembler à ceci :
Comment amorcer la base de données
L'ensemencement dans la programmation signifie générer de fausses données aléatoires pour une base de données à des fins de test.
Maintenant que vous avez créé le modèle, exécuté les migrations et créé la définition dans CommentFactory, exécutez le seeder à l'aide du fichier DatabaseSeeder .
Créer le fichier CommentSeeder
Créez un fichier seeder qui utilise factory pour générer les données :
php artisan make:seeder CommentSeeder.php
Ce code crée un fichier CommentSeeder .php dans le dossier database/seeders .
Modifier la fonction d'exécution
Connectez le modèle de commentaire au CommentSeeder. Ajoutez le code suivant dans la fonction run :
Comment::factory()->count(50)->create();
Ce code indique au CommentSeeder d'utiliser le modèle de commentaire et la fonction de définition de CommentFactory pour générer 50 commentaires dans la base de données. Ajoutez également la use App\Models\Comment;
aux dépendances de fichiers. Le fichier CommentSeeder devrait maintenant ressembler à ceci :
Remarque : Vous pouvez configurer Faker pour créer des données locales. Par exemple, vous pouvez le configurer pour générer des noms italiens au lieu de noms aléatoires en définissant faker_locale
dans le fichier app/config.php sur it_IT
. Vous pouvez en savoir plus sur Faker Locales dans ce guide.
Exécutez le semoir
Ensuite, exécutez le fichier seeder avec Artisan :
php artisan db:seed --class=CommentSeeder
Ce code exécute le fichier seeder et génère 50 lignes de fausses données dans la base de données.
La base de données devrait maintenant contenir 50 lignes de fausses données que vous pouvez utiliser pour tester les fonctions de votre application :
Comment réinitialiser la base de données
Lorsque vous utilisez les données générées pour les tests, réinitialisez la base de données chaque fois que vous exécutez un test. Supposons que vous souhaitiez tester la fonctionnalité de basculement des commentaires approuvée. Actualisez la base de données après chaque test pour vous assurer que les données précédemment générées n'interféreront pas avec les tests futurs.
Utiliser RefreshDatabase
Actualisez la base de données à l'aide du trait RefreshDatabase
dans le fichier de test .
Accédez à ExampleTest.php dans le dossier tests/Feature jusqu'au commentaire use Illuminate\Foundation\Testing\RefreshDatabase;
et ajoutez la ligne de code suivante au-dessus de la fonction test_the_application_returns_a_successful_response
:
use RefreshDatabase;
Le fichier ExampleTest.php devrait maintenant ressembler à ceci :
Exécutez le test
Après avoir ajouté le trait RefreshDatabase
au fichier de test, exécutez le test à l'aide d'Artisan :
php artisan test
Ce code exécute tous les tests dans l'application et actualise la base de données après les tests, comme illustré dans l'image ci-dessous :
Maintenant, vérifiez la base de données pour voir la table de commentaires vide :
Résumé
Cet article a expliqué comment créer un projet Laravel, le connecter à une base de données et créer et configurer des modèles, des fichiers de migration, d'usine et de seeder pour générer des données aléatoires pour la base de données. Il a également expliqué comment réinitialiser la base de données après avoir exécuté des tests.
Vous avez maintenant vu comment Laravel Factories et Faker facilitent la génération de n'importe quelle quantité de données de test en quelques minutes pour tester une application ou même comme espace réservé - avec une configuration minimale.
Lorsque votre application Laravel est prête à être déployée, vous pouvez le faire sur les services d'hébergement d'applications de Kinsta rapidement et efficacement.