我正在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)
}
由于
答案 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');
}