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