如何在laravel测试中获取标头值

时间:2016-06-29 09:18:16

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

这就是我在测试用例

中获得响应的方式
$response = $this->call('POST','/api/auth/login',['username'=>'xx','password'=>'xxx'], [/* cookies */], [/* files */], ['HTTP_ClientSecret' => 'xxxx']);

然后我们可以像这样获得响应内容

$response->getContents()

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

2 个答案:

答案 0 :(得分:5)

做类似的事情:

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

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

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

答案 1 :(得分:0)

您实际上不需要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);