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 缓存请求而不是使用以前请求的信息