【问题标题】:Wrong status code in phpunitphpunit中的错误状态码
【发布时间】:2012-07-17 16:55:50
【问题描述】:

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

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

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

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

}

我在 netbeans 7.1 中使用 phpunits,我的 symfony 防火墙配置为只允许经过身份验证的用户。否则他们会被重定向到登录页面。

可能需要对 php.ini 进行一些调整?

编辑:

这是我从 netbeans 获得的代码:

【问题讨论】:

  • 当您使用浏览器浏览页面时,您会得到什么状态码?它会将您重定向到登录页面还是收到 404?也许这就是问题所在!
  • 还可以考虑使用assertEquals 而不是assertTrue$this->assertEquals(200, $client->getResponse()->getStatusCode());。当此测试失败时,您将知道您拥有的状态代码而不是 200。
  • 当我浏览一个不存在的页面时,我遇到了 404 错误。

标签: symfony phpunit


【解决方案1】:

首先按照@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

【讨论】:

  • 问题不在于状态码的测试,而在于状态码本身。我添加了一个打印屏幕,向您展示我得到的状态码,即使是一个奇怪的 url
【解决方案2】:

我花了 3 天时间试图解决这个问题。

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

现在使用 NetBeans 效果更好

【讨论】:

    猜你喜欢
    • 2016-06-03
    • 2017-04-13
    • 2016-02-23
    • 2019-12-13
    • 1970-01-01
    • 2016-07-28
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多