Symfony2功能测试重定向

时间:2014-08-29 16:27:59

标签: php rest symfony phpunit

我正在使用Symfony2和FOSRestBundle,我现在尝试为我的其余api编写功能测试。我想POST一个用户名并显示它,类似于http://npmasters.com/2012/11/25/Symfony2-Rest-FOSRestBundle.html。即,我的控制器返回一个View::createRedirect([...],Codes::HTTP_CREATED)实例。

现在,我的测试看起来像:

[...]
    $client = static::createClient(array('debug'=>true));
    $request = $client->request('POST', '/names', 
                      array(),
                      array(),
                      array('CONTENT_TYPE' => 'application/json'),
                      $expression);

    $response = $client->getResponse();
    \print_r($response);
    $this->assertEquals($response->getStatusCode(), 201);
    $response = $client->followRedirect();
    \print_r($response);

当我运行它时,我得到了这个输出:

Symfony\Component\HttpFoundation\Response Object
(
[...]
                [location] => Array
                    (
                        [0] => /names/90
                    )
[...]

There was 1 error:

1) MYNAME\MyBundle\Tests\Controller\RestControllerTest::testAddUser
LogicException: The request was not redirected.

为什么没有重定向? 我的错误在哪里?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如果要生成重定向,后端应生成301(“永久”)或302(“临时”)HTTP状态。状态代码为201 is not really a redirect,即使您设置了Location标头也是如此。我认为这取决于客户端实现在201 + Location上发生的事情。