2017-10-09 92 views
1

在Laravel功能測試中,我試圖在會話中存儲變量,以便在餘下的測試中使用它,如下所示:在Laravel的單元/功能測試中存儲和檢索會話變量

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

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

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

當我運行在命令行「PHPUnit的」,我得到這個錯誤:

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

顯然,「會議()」全球幫手不在測試類的工作。我還試圖直接使用「Illuminate \ Session」或「\ Session」與班級合作,但都返回「找不到」錯誤。如何在測試類中存儲和檢索會話變量?

回答

0

在測試中,它有點不同。

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

下面是一個例子:

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

我試圖做的是從我的第一個請求獲得令牌變量,那麼它存儲在多個類使用它在多個方法。我不知道如何用withSession()方法來實現這一點,因爲我需要的會呈現遞歸問題:「$ this-> withSession(['token'=> session('token')]」或者我試圖避免不必要的HTTP請求 – americanknight

+0

我想我可以在主測試類中得到它一次,然後將其擴展到其他類,這樣我就不需要在每個類上檢索標記了, t需要依賴會話。 – americanknight

+0

在大多數情況下,我都這樣做,併爲所有初始化創建一個主類。 – Stony