【问题标题】:How to get header values in laravel testing如何在 laravel 测试中获取标头值
【发布时间】:2016-10-31 21:46:22
【问题描述】:

这就是我在测试用例中获得响应的方式

$response = $this->call('POST','/api/auth/login',['username'=>'xx','password'=>'xxx'], [/* cookies */], [/* files */], ['HTTP_ClientSecret' => 'xxxx']);

那么我们就可以这样获取响应内容了

$response->getContents()

我想知道如何获取响应头数据?

【问题讨论】:

    标签: php unit-testing laravel testing laravel-5.1


    【解决方案1】:

    执行以下操作:

    $response->headers->get('content-type');
    

    或任何你需要的。如果您想查看响应标头中的内容,dd($response->headers); 也可能对您有用。

    $this->call() 返回 Response,它扩展了 Symfony 的 Response,而 headers 是一个对象 ResponseHeaderBag,它具有 following methods

    【讨论】:

      【解决方案2】:

      您实际上并不需要 get 它进行测试,您需要 assert 它具有预期值。

      比如说,你测试throttle middleware,以确保没有人可以在你的网上商店尝试太多信用卡,那就是你的单元测试:

          $route = route('payment');
      
          $iMax = 60;
          for ($i = 1; $i <= $iMax; $i++) {
      
              $response = $this->call('POST', $route, []);
              $response->assertHeader('x-ratelimit-limit', $iMax);
              $response->assertHeader('x-ratelimit-remaining', $iMax - $i);
              $response->assertRedirect();
              $response->assertStatus(302);
              $this->assertSame(iMax, $response->headers->get('x-ratelimit-limit'));
              $this->assertSame(iMax-$i, $response->headers->get('x-ratelimit-remaining'));
          }
      
          // log down headers if needed
          //\Log::debug($response->headers);
      
          $response = $this->call('POST', $route, []);
          $response->assertHeader('x-ratelimit-limit', $iMax);
          $response->assertHeader('x-ratelimit-remaining', 0);
      
          $response->assertStatus(429);
      

      【讨论】:

        猜你喜欢
        • 2014-07-27
        • 2020-03-18
        • 1970-01-01
        • 2017-08-13
        • 2016-07-25
        • 1970-01-01
        • 1970-01-01
        • 2010-11-29
        • 2018-12-27
        相关资源
        最近更新 更多