Laravel 5.5 测试 JSON header 不起作用
Laravel 5.5 Testing JSON header doesn't work
我在测试时遇到问题 Laravel 5.5。我需要在 TEST HEADER 中发送 Bearer Token,但没有用
public function testAuthCheckinvalidToken()
{
$response = $this->withHeaders([
'Accept' => 'application/json',
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $this->token,
])->json('GET', 'auth/check');
...
}
当我dd($response)时,只设置了默认的HEADERS:
#headers: array:5 [
"cache-control" => array:1 [
0 => "no-cache, private"
]
"date" => array:1 [
0 => "Tue, 21 Nov 2017 18:48:27 GMT"
]
"content-type" => array:1 [
0 => "application/json"
]
"x-ratelimit-limit" => array:1 [
0 => 60
]
"x-ratelimit-remaining" => array:1 [
0 => 59
]
]
我的 HEADERS 没有出现。
我觉得我是对的
您在此处设置的 headers 显然是针对请求的,对于响应,您从 Laravel 应用程序中获得 headers 因此显然您不会看到 headers你为你的要求设置。
如果您想看到您在此处设置的 headers,您应该 运行 dd($request);
在您的应用中而不是在测试中。
编辑
确认 headers 已传递给应用程序整个测试代码:
tests/Feafure/ExampleTest.php
<?php
namespace Tests\Feature;
use Tests\TestCase;
class ExampleTest extends TestCase
{
public function testBasicTest()
{
$response = $this->withHeaders([
'Accept' => 'application/json',
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . 'abc',
])->json('GET', 'auth/check');
}
}
routes/web.php
Route::get('auth/check', function() {
dd(request()->headers);
});
所以当我现在 运行 测试时:
./vendor/bin/phpunit
结果是:
Symfony\Component\HttpFoundation\HeaderBag {#49 #headers: array:8 [
"host" => array:1 [
0 => "localhost"
]
"user-agent" => array:1 [
0 => "Symfony/3.X"
]
"accept" => array:1 [
0 => "application/json"
]
"accept-language" => array:1 [
0 => "en-us,en;q=0.5"
]
"accept-charset" => array:1 [
0 => "ISO-8859-1,utf-8;q=0.7,*;q=0.7"
]
"content-type" => array:1 [
0 => "application/json"
]
"authorization" => array:1 [
0 => "Bearer abc"
]
"content-length" => array:1 [
0 => 2
] ] #cacheControl: [] }
因此,正如您所见,headers 来自测试已传递给应用程序
请检查你的Auth guard
也许你的 auth quard 缓存请求而不是使用以前请求的信息
我在测试时遇到问题 Laravel 5.5。我需要在 TEST HEADER 中发送 Bearer Token,但没有用
public function testAuthCheckinvalidToken()
{
$response = $this->withHeaders([
'Accept' => 'application/json',
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $this->token,
])->json('GET', 'auth/check');
...
}
当我dd($response)时,只设置了默认的HEADERS:
#headers: array:5 [
"cache-control" => array:1 [
0 => "no-cache, private"
]
"date" => array:1 [
0 => "Tue, 21 Nov 2017 18:48:27 GMT"
]
"content-type" => array:1 [
0 => "application/json"
]
"x-ratelimit-limit" => array:1 [
0 => 60
]
"x-ratelimit-remaining" => array:1 [
0 => 59
]
]
我的 HEADERS 没有出现。 我觉得我是对的
您在此处设置的 headers 显然是针对请求的,对于响应,您从 Laravel 应用程序中获得 headers 因此显然您不会看到 headers你为你的要求设置。
如果您想看到您在此处设置的 headers,您应该 运行 dd($request);
在您的应用中而不是在测试中。
编辑
确认 headers 已传递给应用程序整个测试代码:
tests/Feafure/ExampleTest.php
<?php
namespace Tests\Feature;
use Tests\TestCase;
class ExampleTest extends TestCase
{
public function testBasicTest()
{
$response = $this->withHeaders([
'Accept' => 'application/json',
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . 'abc',
])->json('GET', 'auth/check');
}
}
routes/web.php
Route::get('auth/check', function() {
dd(request()->headers);
});
所以当我现在 运行 测试时:
./vendor/bin/phpunit
结果是:
Symfony\Component\HttpFoundation\HeaderBag {#49 #headers: array:8 [
"host" => array:1 [
0 => "localhost"
]
"user-agent" => array:1 [
0 => "Symfony/3.X"
]
"accept" => array:1 [
0 => "application/json"
]
"accept-language" => array:1 [
0 => "en-us,en;q=0.5"
]
"accept-charset" => array:1 [
0 => "ISO-8859-1,utf-8;q=0.7,*;q=0.7"
]
"content-type" => array:1 [
0 => "application/json"
]
"authorization" => array:1 [
0 => "Bearer abc"
]
"content-length" => array:1 [
0 => 2
] ] #cacheControl: [] }
因此,正如您所见,headers 来自测试已传递给应用程序
请检查你的Auth guard 也许你的 auth quard 缓存请求而不是使用以前请求的信息