Maison >cadre php >Laravel >Présentation du test unitaire Laravel : simulation d'utilisateurs authentifiés

Présentation du test unitaire Laravel : simulation d'utilisateurs authentifiés

藏色散人
藏色散人avant
2021-04-23 16:13:541640parcourir

Test unitaire Laravel : simuler un utilisateur authentifié

Lors de l'écriture de tests unitaires dans Laravel, vous rencontrez souvent le besoin de simuler des utilisateurs authentifiés, comme la création de nouveaux articles, la création de commandes, etc. Alors, comment implémenter cela dans le test unitaire de Laravel ?

Solution officielle

Le chapitre sur les tests dans la documentation officielle de Laravel mentionne :

Bien sûr, une utilisation courante de la session consiste à maintenir l'état de l'utilisateur authentifié. La méthode fournit un moyen simple d'authentifier un utilisateur donné en tant qu'utilisateur actuel. Par exemple, nous pouvons utiliser une fabrique de modèles pour générer et authentifier un utilisateur :
<?php

use App\User;

class ExampleTest extends TestCase
{
    public function testApplication()
    {
        $user = factory(User::class)->create();

        $response = $this->actingAs($user)
                         ->withSession(['foo' => 'bar'])
                         ->get('/');
    }
}

En fait, en utilisant Laravel Testing IlluminateFoundationTestingConcernsImpersonatesUsers actingAs et be méthodes dans Trait. Une fois

défini, dans le code de test suivant, nous pouvons obtenir l'utilisateur actuellement authentifié via des méthodes telles que auth()->user().

Faux utilisateur authentifié

Dans l'exemple officiel, factory est utilisé pour créer un vrai utilisateur, mais le plus souvent, nous voulons simplement utiliser un faux utilisateur comme utilisateur authentifié, au lieu de créer. un véritable utilisateur via l'usine.

Créez un nouveau User calss:

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    protected $fillable = [
        'id', 'name', 'email', 'password',
    ];
}

dans le répertoire tests Vous devez ajouter l'attribut $fillable dans id Sinon, une exception sera levée : IlluminateDatabaseEloquentMassAssignmentException: id.

Ensuite, forgez une authentification utilisateur :

$user = new User([
    'id' => 1,
    'name' => 'ibrand'
]);

 $this->be($user,'api');
Je continuerai à écrire quelques articles sur les petits détails des tests unitaires à l'avenir, veuillez faire attention : )
Recommandations associées : Tutoriel des cinq dernières vidéos Laravel

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer