获取控制器内的环境

时间:2011-11-25 16:53:06

标签: ajax testing controller symfony phpunit

我的一个控制器中只有通过AJAX访问的情况,我有以下代码。

if (!$request->isXmlHttpRequest()) {
    $response = new Response();
    $response->setContent('AJAX requests only!');
    return $response;
}

当我测试时,这给了我一个问题,因为该请求实际上并未通过AJAX进行。这样每次都会破坏我的测试。我该如何解决这个问题?

我的想法:

  1. 我尝试设置服务器标头,但绝对没有成功。
  2. 检查我是否在控制器的测试环境中,如果是,则不进行检查。我知道这很脏,但它会起作用。 : - /问题是我无法弄清楚如何发现我所处的环境。
  3. 其他人有任何其他想法或提示,我错过了上述工作之一吗?

2 个答案:

答案 0 :(得分:8)

当然在Icode4food案例中,使用Matt的解决方案更好,但这里是如何找到当前环境:

$this->container->getParameter(‘kernel.environment’)

答案 1 :(得分:5)

查看课程isXmlHttpRequestRequest的代码和课程getHeaders中的方法ServerBag,下面的代码应该可以解决问题:

$client->request(
    'GET',
    '/path/to/test',
    array(),
    array(),
    array(
        'HTTP_X-Requested-With' => 'XMLHttpRequest',
    )
);

我没有亲自测试,但我认为它应该有效。 Request下面的代码行用于检查http请求是否为XmlHttpRequest

return 'XMLHttpRequest' == $this->headers->get('X-Requested-With');

在代码中,$this->headers使用:

设置
$this->headers = new HeaderBag($this->server->getHeaders());

方法getHeaders创建一个标头数组。每个以HTTP_开头的服务器变量,加上一些特殊的服务器变量,如CONTENT_TYPE,都放在这个数组中。

希望这有帮助。

的问候,
马特