2012-07-17 81 views
2

即使请求的页面不存在,我总是会在我的测试用例中得到状态代码200/ok。phpunit中错误的状态代码

public function testCompleteScenario() 
{ 
    $client = static::createClient(); 

    $container = $client->getContainer(); 
    $kernel = $client->getKernel(); 

    $crawler = $client->request('GET', '/somethingnotexisting'); 
    $this->assertTrue(200 === $client->getResponse()->getStatusCode()); 

} 

我使用phpunits与NetBeans 7.1和我的symfony的防火墙配置为只允许认证的用户。否则,他们会重定向到登录页面。

有可能是一些php.ini调优?

编辑:

这里是代码,我从NetBeans中:

enter image description here

+2

当您使用浏览器浏览网页时,您会获得什么状态代码?它是否将您重定向到登录页面,还是您获得了404?也许这就是问题所在! – Sgoettschkes 2012-07-17 18:24:17

+1

另外考虑使用'assertEquals'而不是'assertTrue':'$ this-> assertEquals(200,$ client-> getResponse() - > getStatusCode());'。当这个测试失败时,你会知道你有哪些状态码,而不是200. – AdrienBrault 2012-07-17 19:54:29

+0

当我浏览一个不存在的页面时,我有一个错误404. – Chopchop 2012-07-18 10:13:14

回答

0

我花了3天尝试解决这个问题。

我已将我的PHPUnit版本从3.6.11降级到3.5.14。

它现在对NetBeans更好用

4

首先做@AdrienBrault建议是什么,使用的assertEquals:

$this->assertEquals(200, $client->getResponse()->getStatusCode()); 

这种方式,你会查看返回的状态码。

因为功能测试客户端默认不会重定向,所以您可能会获得301或302(重定向)。

尝试这样:

public function testCompleteScenario() 
{ 
    $client = static::createClient(); 

    $container = $client->getContainer(); 
    $kernel = $client->getKernel(); 

    $client->request('GET', '/somethingnotexisting'); 
    $crawler = $client->followRedirect(); 

    $this->assertEquals(200, $client->getResponse()->getStatusCode()); 
} 

参见:http://symfony.com/doc/current/book/testing.html#redirecting

+0

这个问题没有进入状态码的测试,而是处于状态代码本身。我添加了一个打印屏幕,向您展示我使用更奇怪的URL获得的状态码 – Chopchop 2012-07-18 11:01:25

相关问题