【问题标题】:Laravel 5.5 Testing JSON header doesn't workLaravel 5.5 测试 JSON 标头不起作用
【发布时间】:2018-05-05 08:43:50
【问题描述】:

我在测试 Laravel 5.5 时遇到问题。我需要在 TEST HEADER 中发送不记名令牌,但不起作用

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
            ]
          ]

我的标题没有出现。 我认为我是对的

【问题讨论】:

    标签: laravel-5 phpunit laravel-5.5 laravel-request laravel-response


    【解决方案1】:

    请检查您的身份验证守卫 也许您的 auth quard 缓存请求,而不是使用来自先前请求的信息

    【讨论】:

      【解决方案2】:

      您在此处设置的标头显然是针对请求的,对于响应您从 Laravel 应用程序获取标头,因此显然您不会看到您为请求设置的标头。

      如果您想查看您在此处设置的标头,您应该在您的应用程序中而不是在测试中运行 dd($request);

      编辑

      要确认标头已传递给应用程序整个测试代码:

      测试/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还没有发送,所以我的请求失败了
      • @FernandoHeriqueRubimPioli 看看我的编辑,一切都按预期工作
      • 添加到答案我想说,对于 POST 请求,您可以使用 ->json('POST', 'url', $dataAsArray); 发送数据您可以使用 json_decode('jsonString',true) 将 Json 转换为 Array
      • 如果有人需要获取每个属性的方法:$request->headers->get('user-agent')
      猜你喜欢
      • 2017-04-08
      • 2018-06-18
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      • 2018-03-11
      • 2021-01-07
      相关资源
      最近更新 更多