Un guide complet pour tester dans Laravel avec PHPUnit

WBOY
Libérer: 2024-07-29 06:56:53
original
530 Les gens l'ont consulté

Introduction aux tests dans Laravel

Les tests sont un aspect essentiel du développement logiciel qui garantit que votre application fonctionne comme prévu. Laravel fournit une suite de tests robuste et prête à l'emploi avec PHPUnit, un framework de test populaire pour PHP. Ce guide vous guidera dans la configuration et l'exécution de tests dans Laravel, expliquant les différences entre les tests unitaires et de fonctionnalités et fournissant des exemples pour divers scénarios de test.

Structure des dossiers : tests unitaires et tests de fonctionnalités

Dans Laravel, les tests sont généralement organisés en deux répertoires principaux : Unit et Feature.

Tests unitaires : Ces tests sont conçus pour tester de petites parties isolées de votre application, telles que des méthodes ou des classes individuelles. Ils se trouvent généralement dans le répertoire tests/Unit. Chaque fonction de test doit commencer par le mot test.

Exemple :

public function testExampleFunction() {
    $this->assertTrue(true);
}
Copier après la connexion

Tests de fonctionnalités : Ces tests gèrent des interactions plus complexes et testent généralement plusieurs composants travaillant ensemble. Ils se trouvent dans le répertoire tests/Feature. Les tests de fonctionnalités impliquent souvent de faire des requêtes HTTP et de vérifier les réponses.

Exécuter des tests dans Laravel

Pour exécuter tous les tests dans votre application Laravel, utilisez la commande suivante :

./vendor/bin/phpunit
Copier après la connexion
Copier après la connexion

Configuration de l'environnement de test

Avant d'exécuter des tests, il est important de configurer votre environnement de test. Modifiez votre fichier phpunit.xml pour définir les variables d'environnement à des fins de test. Par exemple, pour utiliser une base de données SQLite en mémoire pour des tests plus rapides :


    
    
    
    
    
    
    
    
    
    
    

Copier après la connexion

Après avoir activé SQLite comme environnement de test, videz le cache de configuration :

php artisan config:clear

Copier après la connexion

*Exemple : tester si la route de profil existe et fonctionne correctement
*

Créez un test pour l'itinéraire profil :

php artisan make:test ProfileTest
Copier après la connexion

Ajoutez une méthode de test pour vérifier si la page de profil affiche un texte spécifique :

public function testProfilePage(){
    $response = $this->get('/profile');
    $response->assertSeeText('Your Profile');
}
Copier après la connexion

Test des interactions avec la base de données

Configuration d'une base de données de tests

Avant de tester les interactions avec la base de données, créez une configuration de base de données de test dans config/database.php :

'mysqltesting' => [
    'driver' => 'mysql',
    'url' => env('DB_URL'),
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => 'laravel_testing',
    'username' => env('DB_USERNAME', 'root'),
    'password' => env('DB_PASSWORD', ''),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'prefix_indexes' => true,
    'strict' => true,
    'engine' => null,
    'options' => extension_loaded('pdo_mysql') ? array_filter([
        PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
    ]) : [],
],
Copier après la connexion

Exécution de tests de base de données

Exécutez la commande PHPUnit pour vous assurer que la base de données de test est créée et fonctionne :

./vendor/bin/phpunit
Copier après la connexion
Copier après la connexion

Un guide complet pour tester dans Laravel avec PHPUnit

Exemple : tester l'enregistrement des utilisateurs

Créez un test pour l'enregistrement des utilisateurs :

php artisan make:test UserTest

Copier après la connexion

Ajoutez une méthode de test pour vérifier qu'un utilisateur peut être créé et enregistré dans la base de données :

public function test_registration(): void
{
    $user = new User();
    $user->name = 'Test User';
    $user->email = 'email@example.com';
    $user->password = bcrypt('password');

    $user->save();

    $this->assertDatabaseHas('users', ['email' => 'email@example.com']);
}
Copier après la connexion

Test de l'action du magasin

Créez un test pour l'action du magasin dans la classe PostTest :

public function testPostStoreValid()
{
    $data = [
        'title'=> 'Test Post',
        'slug' => 'test-post',
        'content' => 'Content of the post',
        'active' => true,
    ];

    $this->post('/posts', $data)
         ->assertStatus(302)
         ->assertSessionHas('status');

    $this->assertEquals(session('status'), 'Post was created!');
}
Copier après la connexion

Test d'échec

Ajoutez une méthode de test pour vérifier les erreurs de validation :

public function testPostFail()
{
    $data = [
        'title'=> '',
        'content' => '',
    ];

    $this->post('/posts', $data)
         ->assertStatus(302)
         ->assertSessionHas('errors');

    $messages = session('errors')->getMessages();

    $this->assertEquals($messages['title'][0], 'The title must be at least 4 characters.');
    $this->assertEquals($messages['title'][1], 'The title field is required.');
    $this->assertEquals($messages['content'][0], 'The content field is required.');
}
Copier après la connexion

*Action de mise à jour de test
*

Ajouter une méthode de test pour mettre à jour une publication :

public function testPostUpdate()
{
    $post = new Post();

    $post->title = "Initial Title";
    $post->slug = Str::slug($post->title, '-');
    $post->content = "Initial content";
    $post->active = true;

    $post->save();

    $this->assertDatabaseHas('posts', $post->toArray());

    $data = [
        'title' => 'Updated Title',
        'slug' => 'updated-title',
        'content' => 'Updated content',
        'active' => false,
    ];

    $this->put("/posts/{$post->id}", $data)
         ->assertStatus(302)
         ->assertSessionHas('status');

    $this->assertDatabaseHas('posts', ['title' => $data['title']]);
    $this->assertDatabaseMissing('posts', ['title' => $post->title]);
}
Copier après la connexion

Test de l'action de suppression

Ajouter une méthode de test pour supprimer une publication :

public function testPostDelete()
{
    $post = new Post();

    $post->title = "Title to delete";
    $post->slug = Str::slug($post->title, '-');
    $post->content = "Content to delete";
    $post->active = true;

    $post->save();

    $this->assertDatabaseHas('posts', $post->toArray());

    $this->delete("/posts/{$post->id}")
         ->assertStatus(302)
         ->assertSessionHas('status');

    $this->assertDatabaseMissing('posts', $post->toArray());
}
Copier après la connexion

**

Exécuter des tests spécifiques avec PHPUnit

**

Pour exécuter une méthode ou une classe de test spécifique, utilisez l'option --filter avec PHPUnit. Voici quelques exemples :

Exécuter une méthode de test spécifique

./vendor/bin/phpunit --filter PostTest::testPostDelete
Copier après la connexion

Exécuter tous les tests dans une classe spécifique

./vendor/bin/phpunit --filter PostTest
Copier après la connexion

Exécuter des tests dans un fichier spécifique

./vendor/bin/phpunit tests/Feature/PostTest.php
Copier après la connexion

Sortie verbeuse

Pour une sortie plus détaillée, ajoutez l'option -v :

./vendor/bin/phpunit --filter PostTest::testPostDelete -v
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!