2015-12-18 67 views
3

我正在嘗試使用phpunit測試我在laravel 5中編寫的web服務。我是這個測試框架的新手。應用程序使用JWT進行身份驗證,該身份驗證通過請求中的標頭傳遞。如何用phpunit api請求發送頭文件?

我測試一下喜歡這樣:

$response = $this->call('POST', 'authenticate', [ 
    'username' => 'carparts', 
    'email' => '[email protected]', 
    'password' => 'password' 
]); 

$token = 'Bearer ' . json_decode($response->getContent())->token; 

$response = $this->call('POST', 'users', [ 
    "first_name" => "Test", 
    "last_name"  => "Test", 
    "email"   => '[email protected]', 
    "password"  => "testing", 
    "role"   => "1" 
], [], [], [ 
    'Authorization' => $token 
]); 

dd($response->getContent()); 

令牌返回正常,但當我嘗試在接下來的請求,用它來創建一個新用戶,它不能說的令牌無法從請求解析。當我在中間件中檢查request()->headers時,即使沒有顯示標題。我究竟做錯了什麼?如何使用PHPUnit在請求中傳遞標頭?

回答

-1

$server參數是一個服務器變量的數組,而不是http頭。
通過你的令牌HTTP_AUTHORIZATION

$response = $this->call('POST', 'users', [ 
    "first_name" => "Test", 
    "last_name"  => "Test", 
    "email"   => '[email protected]', 
    "password"  => "testing", 
    "role"   => "1" 
], [], [], [ 
    'HTTP_AUTHORIZATION' => $token 
]); 
+0

仍然無法正常工作。我甚至嘗試在我的路由中使用'dd($ _ SERVER ['HTTP_AUTHORIZATION'])'來查看,但它表示未定義的索引。任何想法? – Rohan

+0

我嘗試使用HTTP_Authorization,它適用於我。 – Fr4NgUs

1

有一個函數頭轉化爲服務器瓦爾。嘗試通過這個來代替:

$this->transformHeadersToServerVars([ 'Authorization' => $token ]) 
0

只是胡亂猜測......

檢查你的.htaccess,它必須包含

RewriteCond %{HTTP:Authorization} . 
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 
-1

我使用PHP單位做一些功能測試。

$client->request('GET','url', [], [], ['HTTP_Authorization' => $token]); 

它適合我!

相關問題