2010-08-25 30 views
4

我一直在尝试使用PHPUnit来测试应用程序。我有这一切工作,但无法测试重定向。Zend_Test - 在ControllerUnit中为PHPUnit设置重定向

我的重定向发生在Acl控制器插件中,而不是在控制器中的操作中。

我已经改变了他们使用的

$r = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector'); 
$r->gotoSimple("index", "index", "default"); 

建议的格式,但这种失败的试验,响应主体是空的,我得到这样

Zend_Dom_Exception: Cannot query; no document registered 

错误,如果我再改测试以便调度方法不会导致gotoSimple()被调用,那么测试运行正确。

我该如何在我的应用程序中做一个重定向,以便它能正确运行Zend_Test的响应对象?

Zend文档覆盖了大约两行,我已经尝试过,并且失败了。

谢谢。

回答

4

要测试重定向已经发生,你需要添加

$this->assertRedirectTo('index'); 

运行$this->dispatch();

您不能查询响应主体后,因为它在重定向的情况下是空的(这就是你的例外来自)。
您可以随时检查什么反应实际上看起来像

print_r($this->getResponse()); 
+0

啊。这就说得通了。希望我之前知道 - 因此测试不遵循重定向? – 2010-08-25 14:59:41

+0

它不覆盖响应对象与从重定向获取的内容 - 如果它是你的意思 – Vika 2010-08-25 15:42:30

+0

对 - 现在我知道我可以继续。文件没有提到的东西! – 2010-08-26 08:59:16

3

确保,你的行动返回重定向后什么,因为Zend_Test_PHPUnit disables redirects,因此执行以及重定向后的代码。

$r = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector'); 
$r->gotoSimple("index", "index", "default"); 
return; 

$r = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector'); 
return $r->gotoSimple("index", "index", "default"); 

要测试重定向本身,你可以使用assertRedirect*断言。

阅读上述手册,因为有关于动作钩子的重要注意事项。

+0

我总是返回任何类型的重定向后,我认为我的问题源于事实,我认为测试会返回重定向的内容。现在我知道它不好。 – 2010-08-26 08:58:41