Symfony 2控制器测试无法通过授权标头

时间:2014-01-21 08:58:11

标签: symfony functional-testing

我有一个用Symfony 2编写的HTTP API,我正在为它编写一些功能测试。

我注意到当我尝试发送Authorization标头时,在我记录收到的标头时,控制器中没有收到它。

在测试控制器中:

$client = self::createClient();
$client->insulate();

$headers = array(
    'Authorization' => "Bearer {$accessToken}",
    'CONTENT_TYPE' => 'application/json',
);

$client->request('DELETE', "/auth", array(), array(), $headers );

在测试控制器中:

print_r( $request->headers );

输出:

Symfony\Component\HttpFoundation\HeaderBag Object
(
    [headers:protected] => Array
        (
            [host] => Array
                (
                    [0] => localhost
                )

            [user-agent] => Array
                (
                    [0] => Symfony2 BrowserKit
                )

            [accept] => Array
                (
                    [0] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
                )

            [accept-language] => Array
                (
                    [0] => en-us,en;q=0.5
                )

            [accept-charset] => Array
                (
                    [0] => ISO-8859-1,utf-8;q=0.7,*;q=0.7
                )

            [content-type] => Array
                (
                    [0] => application/json
                )

            [x-php-ob-level] => Array
                (
                    [0] => 0
                )

        )

    [cacheControl:protected] => Array
        (
        )

)

如何传递Authorization标题?

1 个答案:

答案 0 :(得分:19)

对于Symfony 2,您似乎需要使用$_SERVER文档[1]中列出的标题。

从文档中不是很清楚但在我的情况下我必须做以下事情:

$headers = array(
    'HTTP_AUTHORIZATION' => "Bearer {$accessToken}",
    'CONTENT_TYPE' => 'application/json',
);

$client->request('DELETE', "/auth", array(), array(), $headers );

请注意问题中使用的HTTP_AUTHORIZATION vs Authorization标头。这为我解决了这个问题。

[1] http://www.php.net/manual/en/reserved.variables.server.php