Zend_Test - 在PHPUnit的Controller插件中设置重定向

时间:2010-08-25 12:10:55

标签: zend-framework redirect phpunit

我一直在尝试使用PHPUnit来测试应用程序。我已经完成了所有工作,但无法测试重定向。

我的重定向发生在Acl Controller插件中,而不是在Controller中的Action内。

我已将其更改为使用

的建议格式
$r = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
$r->gotoSimple("index", "index", "default");

但是这在测试中失败了,响应体是空的,我得到像

这样的错误
Zend_Dom_Exception: Cannot query; no document registered

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

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

Zend文档在大约两行中介绍了这一点,我尝试了它并且失败了。

感谢。

2 个答案:

答案 0 :(得分:4)

要测试是否已发生重定向,您需要添加

$this->assertRedirectTo( 'index' );
运行$this->dispatch();

您无法查询响应正文,因为在重定向的情况下它是空的(这是您的例外来源)。
您始终可以使用

检查响应的实际情况
print_r( $this->getResponse() );

答案 1 :(得分: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*断言。

阅读上述手册,因为有关于动作挂钩的重要说明。