2017-10-09 5 views
1

Dans un test de fonctionnalités de Laravel, j'essaie de stocker une variable dans une session afin de pouvoir l'utiliser dans le reste de mes tests, comme suit:Stockage et récupération des variables de session dans les tests d'unité/fonctionnalité dans Laravel

public function testLogin() 
{ 
    $response = $this->json('POST', '/login', $myCredentials); 

    $response 
     ->assertStatus(200) 
     ->assertJson([ 
      'token' => true 
     ]); 

    session(['token' => $response['token']]); 
} 

Quand je lance "phpunit" dans la ligne de commande, je reçois cette erreur:

PHP Fatal error: Uncaught ReflectionException: Class session does not exist in /vendor/laravel/framework/src/Illuminate/Container/Container.php:752

Apparemment, l'aide globale "session()" ne fonctionne pas dans les classes de test. J'ai également essayé de travailler directement avec la classe en utilisant "Illuminate \ Session" ou juste "\ Session", mais tous deux retournés dans les erreurs "not found". Comment puis-je stocker et récupérer des variables de session dans des classes de test?

Répondre

0

Dans les tests, c'est un peu différent.

https://laravel.com/docs/5.2/testing#sessions-and-authentication

Voici un exemple:

public function testApplication() 
{ 
    $this->withSession(['foo' => 'bar']) 
     ->visit('/'); 
} 
+0

Ce que je suis en train de faire est d'obtenir une variable jeton de ma première demande, puis enregistrez-le et l'utiliser sur plusieurs méthodes dans plusieurs classes. Je ne sais pas comment je pourrais accomplir cela avec la méthode withSession(), car ce dont j'ai besoin présenterait un problème récursif: "$ this-> withSession (['token' => session ('token')]". est-ce que je dois juste récupérer le jeton sur chaque classe? J'essaie d'éviter les requêtes HTTP inutiles – americanknight

+0

Je suppose que je pourrais l'obtenir une fois dans une classe de test maître, puis l'étendre aux autres classes. J'ai besoin de compter sur des sessions – americanknight

+0

Dans la plupart des cas, je fais la même chose et fais une classe master pour toutes les initialisations ... – Stony