断言框架单元测试在assertResponseCode(200)上失败

时间:2010-12-16 20:13:28

标签: php unit-testing zend-framework phpunit

我正在Zend Framework应用程序上运行一些单元测试。我无法理解的是,以下测试失败了:

public function testCreateFaqItem()
{
    $this->LoginUser();
    $this->dispatch('/faq/admin-faq/create');
    var_dump($this->getResponse());
    $this->assertResponseCode(200);
    $this->assertQueryContentContains('h1', 'Create');
    $this->assertController('admin-faq');
    $this->assertAction('edit');
}

如果在assertResponseCode(200)上失败,当我删除assertResponseCode(200)时,测试通过。任何帮助将不胜感激。

- 编辑 -

响应对象转储:

object(Zend_Controller_Response_HttpTestCase)#1130 (8) {
  ["_body":protected]=>
  array(1) {
    ["default"]=>
    string(0) ""
  }
  ["_exceptions":protected]=>
  array(0) {
  }
  ["_headers":protected]=>
  array(1) {
    [0]=>
    array(3) {
      ["name"]=>
      string(8) "Location"
      ["value"]=>
      string(13) "/user/profile"
      ["replace"]=>
      bool(true)
    }
  }
  ["_headersRaw":protected]=>
  array(0) {
  }
  ["_httpResponseCode":protected]=>
  int(302)
  ["_isRedirect":protected]=>
  bool(true)
  ["_renderExceptions":protected]=>
  bool(false)
  ["headersSentThrowsException"]=>
  bool(true)
}

由于

3 个答案:

答案 0 :(得分:1)

对于任何单元测试功能,最后一个参数始终是一条消息,如果测试失败将显示该消息。因此,对于此示例,无需执行var_dump。相反,这是我测试响应代码200的方式:

$this->assertResponseCode(200, 'The response code is ' . $this->getResponse()->getHttpResponseCode());

只有在测试失败时才会显示该消息,并且会告诉我最新情况。使代码更清晰:)

答案 1 :(得分:0)

您可以通过转储响应对象并查看标题和正文来调试它。

// Within your test, before the assertions
var_dump($this->getResponse()); 

答案 2 :(得分:0)

为了解决登录用户并仍在测试响应代码200的问题,我插入了$ this-> resetResponse();登录用户后。

public function testCreateFaqItem()
    {
        $this->LoginUser();
        $this->resetResponse();
        $this->dispatch('/faq/admin-faq/create');
        $this->assertResponseCode(200);
        $this->assertQueryContentContains('h1', 'Create');
        $this->assertController('admin-faq');
        $this->assertAction('create');
    }