断言HTTP状态码为200而不是500失败。

3

我正在尝试对某个请求的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个回答

2

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即可。


那么,div.text_exception > h1 是什么意思? - Rafael Adel
@RafaelAdel xpath 到消息本身。我更新了我的答案。 - Vitalii Zurian
嗯,我已经尝试过了,但是没有任何输出。我认为 if($block->count()) 返回 false。因为我已经将 $this->assertEquals("dummy", $error) 放在那个 if 语句里面了。 - Rafael Adel
好的,我找到了,它是text-exception而不是text_exception - Rafael Adel
@RafaelAdel 这可能取决于框架版本。 - Vitalii Zurian
对于Symfony4,筛选器应该长成这样:"'h1.exception-message'": $block = $crawler->filter('h1.exception-message'); - Sergio Zaharchenko

0

你也可以在请求后回显HTML,以查看响应中的内容。

echo $crawler->html();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接