Laravel 5.2单元测试集标头不起作用

时间:2016-11-24 13:16:32

标签: php laravel api unit-testing laravel-5.2

我有以下断言:

$this->call('GET', '/api/v1/ubication/suggest', [
            'term' => 'a'
        ], [], [], ['Accept' => 'application/json']);

$this->assertResponseStatus(422);

调用方法定义如下:

public function call($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null) {

}

我将我的标题传递到$ server位置,但我仍然在响应中获得302状态代码(我正在测试请求验证)而不是422,这是我所期望的。

我如何在测试中模拟该标题?

2 个答案:

答案 0 :(得分:1)

如果您想使用标题进行GET调用,可以使用:

$this->get('/oauth', [ 'HTTP_X_API_KEY' => 'xxxx' ]);

示例:

$url

由于您要发出GET请求,因此您的参数可以包含在compile files('libs/guava-collections-r03.jar')

Source

答案 1 :(得分:0)

您仍然可以使用

$this->call('GET', '/api/v1/ubication/suggest', [
            'term' => 'a'
        ], [], [], ['Accept' => 'application/json']);

之所以不起作用,是因为Laravel在后台过滤掉了所有不以“ HTTP_”开头的标头。

因此,您所需要做的就是将“ Accept”替换为“ HTTP_Accept”

$this->call('GET', '/api/v1/ubication/suggest', [
            'term' => 'a'
        ], [], [], ['HTTP_Accept' => 'application/json']);
```