Les tests sont essentiels au développement web. Les Laravel Model Factories définissent les enregistrements de la base de données d’une manière prévisible et facilement reproductible afin que les tests de votre application soient cohérents et contrôlés. Les usines 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 qu’ils ne soient mis en ligne, vous devrez 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 la fonctionnalité de votre application. Laravel vous permet de le faire sans obtenir les commentaires des 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 les commentaires d’utilisateurs réels.

Conditions préalables

Pour compléter ce tutoriel, vous devez être familier avec les éléments suivants :

  • XAMPP
  • Composer

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 sur Windows.

Composer est un outil qui vous permet de définir, d’installer et de télécharger les paquets 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 pour le suivre.

Comment configurer le projet

Dans cette section, vous allez créer un projet Laravel et le connecter à une base de données. Voyons ce que cela implique et comment y parvenir.

Installez le programme d’installation de Laravel

Pour créer rapidement un projet Laravel, installez le programme d’installation de Laravel :

composer global require laravel/installer

Ce code installe le programme d’installation de Laravel globalement sur votre machine.

Créez 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 :

Création du projet Laravel
Création du projet Laravel

Une autre façon plus simple d’installer Laravel est d’utiliser Composer directement.

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émarrez l’application

Vous pouvez maintenant changer le répertoire en app-name et démarrer le projet en utilisant 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 :

Laravel
Laravel

Créez une base de données

Pour connecter votre application à une base de données, vous devez créer une nouvelle base de données en utilisant l’interface graphique PHPMyAdmin de XAMPP. Allez à localhost/phpmyadmin et cliquez sur Nouveau dans la colonne latérale :

Créer un formulaire de base de données
Créer un formulaire de base de données

L’image ci-dessus montre le formulaire de création de 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.

Modifiez le fichier .env

Pour connecter votre application à une base de données, vous devez éditer 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 le nom de la base de données, le nom d’utilisateur, le port, le mot de passe et l’hôte. Vous êtes maintenant prêt à créer des usines et des modèles.

Remarque : remplacez les valeurs par vos identifiants de base de données. De plus, si vous rencontrez l’erreur « Accès refusé pour l’utilisateur », mettez 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éez le modèle de commentaire

Créez le fichier 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/Models avec du code de base. Ajoutez le code suivant sous la ligne use HasFactory;:

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

Ce code énumère les champs pour lesquels vous souhaitez autoriser les affectations en masse, car Laravel protège par défaut votre base de données contre les affectations en masse. Le fichier de modèle Commentaire devrait maintenant ressembler à ceci :

Fichier de modèle de commentaire
Fichier de modèle de commentaire

Créez le fichier de migration

Après avoir créé le fichier 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

Note : La convention de nommage pour la création de migrations dans Laravel est habituellement snake_caseégalement connue sous le nom de underscore_case. Le premier mot est l’action, le deuxième est un pluriel du modèle, et le dernier est la fonctionnalité qui est créée à l’intérieur du projet. Cela signifie que vous écrirez create_books_table lorsque vous créerez 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 l’édition du fichier de migration 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 c’est la première migration depuis la création de l’application :

Migrations réussies
Migrations réussies

L’image suivante montre tous les fichiers de migration que vous avez exécutés. Chacun représente une table de la base de données :

Base de données après les migrations
Base de données après les migrations

Créez le fichier CommentFactory

Créez un fichier factory contenant votre fonction de définition. Pour cette démonstration, vous créerez une fabrique à 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-la pour qu’elle 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 contenant 45 phrases
  • Une valeur approuvée qui ne peut être que vraie ou fausse
  • Un nombre aléatoire entre 0 et 9999

Reliez le modèle de commentaire à CommentFactory

Reliez 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 use AppModelsComment; aux dépendances du fichier. Le fichier CommentFactory devrait maintenant ressembler à ceci :

Le fichier CommentFactory
Le fichier CommentFactory

Comment alimenter la base de données

En programmation, l’ensemencement consiste à 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éation du fichier CommentSeeder

Créez un fichier seeder qui utilise la 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.

Modifiez la fonction Run

Connectez le modèle Comment à CommentSeeder. Ajoutez le code suivant dans la fonction Run :

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

Ce code indique à CommentSeeder d’utiliser le modèle Comment et la fonction de définition de CommentFactory pour générer 50 commentaires dans la base de données. Ajoutez également le site use AppModelsComment; aux dépendances du fichier. Le fichier CommentSeeder doit maintenant ressembler à ceci :

Fichier CommentSeeder
Fichier CommentSeeder

Remarque : vous pouvez configurer Faker pour qu’il crée des données locales. Par exemple, vous pouvez le configurer pour qu’il génère 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 les Locales de Faker dans ce guide.

Exécutez le seeder

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.

L'ensemencement de la base de données a réussi
L’ensemencement de la base de données a réussi

La base de données devrait maintenant contenir 50 lignes de données fictives que vous pouvez utiliser pour tester les fonctions de votre application :

50 lignes de données dans la base de données
50 lignes de données dans la base de données

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 fonction de basculement des commentaires approuvés. Actualisez la base de données après chaque test pour vous assurer que les données générées précédemment n’interféreront pas avec les tests futurs.

Utilisez RefreshDatabase

Rafraîchissez la base de données à l’aide du trait RefreshDatabase dans le fichier de test.

Naviguez vers ExampleTest.php dans le dossier tests/Feature jusqu’au commentaire use IlluminateFoundationTestingRefreshDatabase; 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 :

Fichier ExampleTest
Fichier ExampleTest

Lancez le test

Après avoir ajouté RefreshDatabase au fichier de test, exécutez le test à l’aide d’Artisan :

php artisan test

Ce code exécute tous les tests de l’application et rafraîchit la base de données après les tests, comme le montre l’image ci-dessous :

Un test Artisan réussi
Un test Artisan réussi

Maintenant, vérifiez la base de données pour voir la table des commentaires vide :

Base de données des commentaires vide
Base de données des commentaires vide

Résumé

Cet article explique 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 d’ensemencement pour générer des données aléatoires pour la base de données. Il explique également comment réinitialiser la base de données après l’exécution 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 placeholder – 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.

Steve Bonisteel Kinsta

Steve Bonisteel is a Technical Editor at Kinsta who began his writing career as a print journalist, chasing ambulances and fire trucks. He has been covering Internet-related technology since the late 1990s.