Testen is een essentieel onderdeel van webdevelopment. Laravel Model factories definiëren databaserecords op een voorspelbare en gemakkelijk repliceerbare manier, zodat je app tests consistent en gecontroleerd zijn. Model factories definiëren een set standaard attributen voor elk van je Eloquent modellen.

Als je bijvoorbeeld een blogging app maakt waarmee auteurs en moderators comments kunnen goedkeuren voordat ze live gaan, moet je testen of de functie goed werkt voordat je hem uitrolt naar je gebruikers. Voor dit alles zijn testgegevens nodig.

Om de hierboven beschreven blogging app te testen, heb je commentdata nodig om de functionaliteit van je applicatie na te bootsen en te testen. Met Laravel kun je dat doen zonder comments van echte gebruikers te krijgen door Laravel factories en Faker te gebruiken om nepgegevens te genereren.

Dit artikel legt uit hoe je commentdata krijgt zonder comments van echte gebruikers.

Voorwaarden

Om deze tutorial te voltooien moet je bekend zijn met het volgende:

  • XAMPP
  • Composer

XAMPP is een gratis en eenvoudig te installeren Apache distributie die PHP, Perl en MariaDB – een MySQL database – bevat. Deze handleiding gebruikt de nieuwste versie, 8.1.10, die PHP 8.1.10 installeert. Lees dit artikel als je XAMPP voor MacOS installeert of deze gids voor Linux. Deze handleiding gebruikt XAMPP op Windows.

Composer is een tool waarmee je de pakketten waarvan je web app afhankelijk is in ontwikkeling en productie kunt definiëren, installeren en downloaden. Deze handleiding gebruikt versie v2.4.4 van Composer, waarvoor PHP versie 7.2+ nodig is. Je gebruikt Composer om het Laravel installatieprogramma voor deze tutorial te installeren.

Je kunt ook de complete code voor het project downloaden om mee te volgen.

Het project opzetten

In dit deel ga je een Laravel project maken en het verbinden met een database. Laten we eens kijken wat dat allemaal inhoudt en hoe je dat kunt bereiken.

Installeer de Laravel installer

Om snel een Laravel project te maken, installeer je de Laravel installer:

composer global require laravel/installer

Deze code installeert de Laravel installer globaal op je machine.

Maak een Laravel project

Maak vervolgens een Laravel project aan door het volgende uit te voeren:

laravel new app-name

Deze code bootstrapt een nieuw Laravel project en installeert alle dependencies:

Het Laravel project aanmaken
Het Laravel project aanmaken

Een andere eenvoudigere manier om Laravel te installeren is door rechtstreeks Composer te gebruiken.

composer create-project laravel/laravel app-name

Je hoeft het Laravel installatieprogramma niet te installeren als je de bovenstaande methode gebruikt.

Start de app

Je kunt nu de map veranderen in app-name en het project starten met Laravels eigen command-line interface (CLI) tool, Artisan:

php artisan serve

Deze code start het project en verbindt het met localhost:8000 of een andere beschikbare poort als poort 8000 in gebruik is. Op localhost:8000 zou je zoiets als dit moeten zien:

Homepage van Laravel site
Laravel

Maak een database aan

Om je app met een database te verbinden, moet je een nieuwe database aanmaken met de PHPMyAdmin grafische gebruikersinterface van XAMPP. Ga naar localhost/phpmyadmin en klik op New in de zijbalk:

Maak database aan
Maak database aan

De afbeelding hierboven toont het formulier Create database met app_name als databasenaam.

Klik op Create om een database aan te maken.

Bewerk het .env bestand

Om je app met een database te verbinden, moet je het DB gedeelte van het .env bestand bewerken:

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

Deze code vult de databasegegevens met je databasenaam, gebruikersnaam, poort, wachtwoord en host. Je bent nu klaar om factories en models aan te maken.

Opmerking: Vervang de waarden door je databasegegevens. Als je de foutmelding “Access denied by user” tegenkomt, zet dan de waarden voor DB_USERNAME en DB_PASSWORD tussen dubbele aanhalingstekens.

Nepgegevens genereren

Na het maken van de app en het verbinden met de database, kun je nu de nodige bestanden maken om nepgegevens in de database te genereren.

Maak het commentmodel

Maak het modelbestand voor de interactie met de databasetabellen. Om een model te maken gebruik je Artisan:

php artisan make:model Comment

Deze code maakt een Comment.php bestand binnen de app/Models map met wat boilerplate code. Voeg de volgende code toe onder de regel use HasFactory;:

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

In deze code staan de velden die je bulktoewijzingen wilt toestaan, omdat Laravel je database standaard beschermt tegen bulktoewijzingen. Het modelbestand Comment moet er nu zo uitzien:

Modelbestand comments
Modelbestand comments

Maak het migratiebestand

Nadat je het modelbestand hebt gemaakt en de array $fillable hebt gedeclared, moet je het migratiebestand maken met het onderstaande commando:

php artisan make:migration create_comments_table

Opmerking: De naamgevingsstructuur voor het maken van migraties in Laravel is meestal snake_case, ook bekend als underscore_case. Het eerste woord is de actie, het tweede woord is een meervoud van het model, en het laatste woord is de eigenschap die binnen het project wordt aangemaakt. Dit betekent dat je create_books_table schrijft als je een migratie maakt voor een Book model.

Deze code maakt een bestand aan met de naam yyyy_mm_dd_hhmmss_create_comments_table in de map database/migrations.

Bewerk vervolgens de up functie 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();
    });
    }

Deze code maakt een schema dat een tabel aanmaakt met de kolommen: id, name, email, body, approved, likes, en timestamps.

Voer de migraties uit

Het aanmaken en bewerken van het migratiebestand doet niets totdat je ze uitvoert met de opdrachtregel. Als je naar de databasemanager kijkt, is die nog steeds leeg.

Voer de migraties uit met Artisan:

php artisan migrate

Dit commando voert alle migraties uit binnen database/migrations omdat het de eerste migratie is sinds het aanmaken van de app:

Succesvolle migraties
Succesvolle migraties

De volgende afbeelding toont alle migratiebestanden die je hebt uitgevoerd. Elk staat voor een tabel in de database:

Database na migraties
Database na migraties

Maak het CommentFactory bestand

Maak een factory bestand dat je definition functie bevat. Voor deze demonstratie maak je een factory met behulp van Artisan:

php artisan make:factory CommentFactory.php

Deze code maakt een CommentFactory.php bestand in de map database/factories.

De definition functie

De functie in CommentFactory definieert hoe Faker nepgegevens genereert. Bewerk hem zodat hij er zo uitziet:

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)
     ];
    }

Deze code vertelt Faker het volgende te genereren:

  • Een naam
  • Een e-mailadres
  • Een paragraaf die 45 zinnen bevat
  • Een goedgekeurde waarde die alleen waar of onwaar kan zijn
  • Een willekeurig getal tussen 0 en 9999

Het commentmodel koppelen aan de CommentFactory

Koppel het Comment model aan CommentFactory door boven de definitie een beschermde $model variabele te declaren:

protected $model = Comment::class;

Voeg ook de use App\Models\Comment; toe aan de bestandsdependencies. Het CommentFactory bestand zou er nu zo uit moeten zien:

Het CommentFactory bestand
Het CommentFactory bestand

De database seeden

Seeding in programmeren betekent het genereren van willekeurige nepgegevens voor een database voor testdoeleinden.

Nu je het model hebt gemaakt, migraties hebt uitgevoerd en de definitie in CommentFactory hebt gemaakt, voer je de seeder uit met behulp van het DatabaseSeeder bestand.

Maak het CommentSeeder bestand

Maak een seeder bestand dat factory gebruikt om de gegevens te genereren:

php artisan make:seeder CommentSeeder.php

Deze code maakt een CommentSeeder.php bestand binnen de database/seeders map.

Bewerk de run functie

Verbind het Comment model met de CommentSeeder. Voeg de volgende code toe binnen de run functie:

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

Deze code vertelt de CommentSeeder om het Comment model en de CommentFactory’s definition functie te gebruiken om 50 comments in de database te genereren. Voeg ook de use App\Models\Comment; toe aan de bestandsdependencies. Het CommentSeeder bestand zou er nu zo uit moeten zien:

CommentSeeder bestand
CommentSeeder bestand

Opmerking: Je kunt Faker configureren om lokale gegevens aan te maken. Je kunt bijvoorbeeld instellen dat het Italiaanse namen genereert in plaats van willekeurige namen door faker_locale in het app/config.php bestand in te stellen op it_IT. Je kunt meer lezen over Faker Locales in deze gids.

Voer de seeder uit

Voer vervolgens het seederbestand uit met Artisan:

php artisan db:seed --class=CommentSeeder

Deze code voert het seeder bestand uit en genereert 50 rijen nepgegevens in de database.

Database seed succesvol
Database seed succesvol

De database zou nu 50 rijen nepgegevens moeten hebben die je kunt gebruiken om de functies van je applicatie te testen:

50 rijen gegevens in de database
50 rijen gegevens in de database

De database resetten

Als je de gegenereerde gegevens gebruikt om te testen, reset dan de database telkens als je een test uitvoert. Stel dat je de goedgekeurde commentfunctie wilt testen. Ververs de database na elke test om te voorkomen dat de eerder gegenereerde gegevens toekomstige tests verstoren.

Gebruik RefreshDatabase

Ververs de database met behulp van de property RefreshDatabase in het test bestand.

Navigeer naar ExampleTest.php in de map Tests/Feature naar de comment use Illuminate\Foundation\Testing\RefreshDatabase; en voeg de volgende regel code toe boven de functie test_the_application_returns_a_successful_response:

use RefreshDatabase;

Het bestand ExampleTest.php moet er nu zo uitzien:

ExampleTest bestand
ExampleTest bestand

Voer de test uit

Nadat je de property RefreshDatabase hebt toegevoegd aan het testbestand, voer je de test uit met Artisan:

php artisan test

Deze code voert alle tests in de app uit en ververst de database na de tests, zoals in de afbeelding hieronder:

Een geslaagde Artisan test
Een geslaagde Artisan test

Controleer nu de database om de lege commenttabel te zien:

Database zonder comments
Database zonder comments

Samenvatting

Dit artikel behandelde hoe je een Laravel project maakt, het verbindt met een database, en modellen, migratie, factory en seeder bestanden maakt en configureert om willekeurige gegevens voor de database te genereren. Het besprak ook hoe je de database kunt resetten na het uitvoeren van tests.

Je hebt nu gezien hoe Laravel factories en Faker het gemakkelijk maken om in enkele minuten zowat elke hoeveelheid testgegevens te genereren om een applicatie te testen of zelfs als placeholder – met minimale configuratie.

Als je Laravel app klaar is om te deployen, kun je dat snel en efficiënt doen op Kinsta’s Applicatie Hosting diensten.

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.