Bonjour,
Je suis entraine de faire des teste unitaire. Nombreux de ces teste unitaire vont avoir besoin d'une session Utilisateur de connecté. Je sais pas comment tester ça. J'ai essayer une première piste de selution est que je me créer un utilsateur et je met ses informations dans un tableau Auth qui contient l'id et le username dans la fonction setUp() de mon fichier de teste.
Décrivez ici votre code ou ce que vous cherchez à faire
public function setUp()
{
parent::setUp();
Artisan::call('migrate');
$user = factory(User::class)->create(['confirmed' => 1, 'confirmation_token' => NULL]);
$response = $this->actingAs($user,'api')->withSession([ 'Auth' => ['id' => $user->id, 'username' => $user->name]])->get('/');
$session = Request::session();
$session->start();
}
À chaque teste j'ai ce tableau Auth qui se créer dans la session :
Illuminate\Session\Store {#622
#id: "XhcZJSogLu5pHq7811K6r3QbfnPrIZUXRFoMEREO"
#name: "laravel_session"
#attributes: array:4 [
"_token" => "oZ10Wqmxqb24gJtLNecoLRt8Djv9lM0tKm70p23W"
"Auth" => array:2 [
"id" => 1
"username" => "Mariana Balistreri MD"
]
"_previous" => array:1 [
"url" => "http://localhost"
]
"_flash" => array:2 [
"old" => []
"new" => []
]
]
#handler: Symfony\Component\HttpFoundation\Session\Storage\Handler\NullSessionHandler {#608}
#started: true
}
Dans mes autres fonctions de testlalalala() je récupère les info de la session si le tableau Auth existe
public function testSession()
{
$session = Request::session();
$user_id = $session->get('Auth.id');
// suite du teste
}
J'ai un doute que c'est la bonne techique pour vraiment bien tester une session. J'ai regardé dans la doc de laravel et ça m'a pas donnée une réponse juste : https://laravel.com/docs/5.4/http-tests#session-and-authentication.
Merci de votre aide.
Bonjour, essais de débugguer le Auth::user()
dd(Auth::user());
Je pense pas que le Request::session() ait accès à l'utilisateur connecté
Bonjour, pour tester avec une Utilisateur connecté, il faut générer et authentifier un utilisateur avec la méthode actingAs() :
public function testApplication()
{
// Tu génèresun utilisateur
$user = factory(User::class)->create();
// Tu authentifies l'utilisateur et il est dans la session
$response = $this->actingAs($user)->get('/') ;
}
Bonjour,
Une foit que j'ai mis l'utilsateur dans la session Je prend la classe Request::session())? J'ai débug la session et je ne voit pas de tableau avec un utiisateur qui connecté dans la session :
public function testSession()
{
$user = factory(User::class)->create(['confirmed' => 1, 'confirmation_token' => NULL]);
$response = $this->actingAs($user)->get('/') ;
$session = Request::session();
dd($session);
}
Illuminate\Session\Store {#623
#id: "wYIKpp3w316aUR3IgVaYQtYWzs2SjeslzQe2Z9lf"
#name: "laravel_session"
#attributes: array:3 [
"_token" => "vOePQyJZjaxVecnefqQy6OPHR5qeVXhNqp4Gc636"
"_previous" => array:1 [
"url" => "http://localhost"
]
"_flash" => array:2 [
"old" => []
"new" => []
]
]
#handler: Symfony\Component\HttpFoundation\Session\Storage\Handler\NullSessionHandler {#611}
#started: false
}
J'ai debugguer Auth::user() et ça me retourne ça :
App\User {#615
#fillable: array:6 [
0 => "name"
1 => "email"
2 => "password"
3 => "confirmation_token"
4 => "ip"
5 => "confirmed"
]
#hidden: array:4 [
0 => "password"
1 => "remember_token"
2 => "email"
3 => "ip"
]
#appends: array:2 [
0 => "email_md5"
1 => "ip_md5"
]
#connection: null
#table: null
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#perPage: 15
+exists: true
+wasRecentlyCreated: true
#attributes: array:11 [
"name" => "Mrs. Bernita Ziemann"
"email" => "uhansen@example.com"
"password" => "$2y$10$3tchfaK/7U9X/aI1XX7pIunnZMvMr9RERgzEaaCuWblWBoq2ITZue"
"remember_token" => "fGDvBBqdqJ"
"role" => "user"
"ip" => "113.81.170.95"
"confirmed" => 1
"confirmation_token" => null
"updated_at" => "2017-02-25 21:56:13"
"created_at" => "2017-02-25 21:56:13"
"id" => 1
]
#original: array:11 [
"name" => "Mrs. Bernita Ziemann"
"email" => "uhansen@example.com"
"password" => "$2y$10$3tchfaK/7U9X/aI1XX7pIunnZMvMr9RERgzEaaCuWblWBoq2ITZue"
"remember_token" => "fGDvBBqdqJ"
"role" => "user"
"ip" => "113.81.170.95"
"confirmed" => 1
"confirmation_token" => null
"updated_at" => "2017-02-25 21:56:13"
"created_at" => "2017-02-25 21:56:13"
"id" => 1
]
#casts: []
#dates: []
#dateFormat: null
#events: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#visible: []
#guarded: array:1 [
0 => "*"
]
#rememberTokenName: "remember_token"
}
Oui et je réupère seulement avec la classe Auth::user() pour faire mes test quand un utilisateur est connecté.