声明HTTP状态代码失败的是200而不是500

时间:2013-10-17 12:09:33

标签: php unit-testing symfony functional-testing

我正在尝试对某个请求的HTTP状态代码进行功能测试200而不是500。我正在使用Symfony2,这是代码:

public function testIndex()
{
    $client = static::createClient();
    $crawler = $client->request('GET', "/");
    $this->assertEquals('Ibw\JobeetBundle\Controller\JobController::indexAction', $client->getRequest()->attributes->get('_controller'));
    $this->assertEquals(200 , $client->getResponse()->getStatusCode());
    $this->assertEquals(0, $crawler->filter('.jobs td.position:contains("Expired")')->count());
}

结果:

  

1)Ibw \ JobeetBundle \ Tests \ Functional \ JobControllerTest :: testIndex   无法断言500场比赛预计为200。

当我通过浏览器手动访问路径“/”时,它工作得很好。

那么这里有什么问题?

2 个答案:

答案 0 :(得分:1)

您的案例中的任何内容都可能导致500错误。

在这种情况下你可以做的是转储响应的内容并检查Symfony调试消息。

我通常使用此类代码段直接在终端中快速检查此类错误:

if (!$response->isSuccessful()) {
    $block = $crawler->filter('div.text_exception > h1');
    if ($block->count()) {
        $error = $block->text();
    }
}

其中div.text_exception > h1是从Symfony2调试页面到消息本身的xpath

然后只需打印$error

答案 1 :(得分:0)

您也可以在请求后回显html以查看响应中的内容。

echo $crawler->html();