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:
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:
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:
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:
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:
De volgende afbeelding toont alle migratiebestanden die je hebt uitgevoerd. Elk staat voor een tabel in de database:
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:
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:
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.
De database zou nu 50 rijen nepgegevens moeten hebben die je kunt gebruiken om de functies van je applicatie te testen:
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:
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:
Controleer nu de database om de lege commenttabel te zien:
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.
Laat een reactie achter