我正在使用Zend_Test_PHPUnit_ControllerTestCase来测试我的控制器。此类提供了各种方法来测试呈现的输出,但我不想让我的视图脚本参与其中。我想测试一下我的观点。有没有办法访问到控制器视图对象?
这是一个例子,我正在尝试做什么:
<?php
class Controller extends Zend_Controller_Action
{
public function indexAction()
{
$this-view->foo = 'bar';
}
}
class ControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{
public function testShowCallsServiceFind()
{
$this->dispatch('/controller');
//doesn't work, there is no such method:
$this->assertViewVar('foo', 'bar');
//doesn't work, end_Test_PHPUnit_ControllerTestCase has no getView method:
$this->assertEquals(
'bar',
$this->getView()->foo
);
}
}
答案 0 :(得分:5)
如果你真的必须对视图断言,请使用Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->view
获取它并对其进行断言。
然而,Zend_Test的意图是使用xpath查询或类似的方法断言实际响应。这将允许您完全测试您的应用程序,而不仅仅是它的一部分。
如果您只是断言视图包含一个var并且它等于给定的东西,那么您并没有真正测试它是否以正确的方式使用。
答案 1 :(得分:0)
1)Zend_Test_PHPUnit_ControllerTestCase::_resetPlaceholders()
使用Zend_Registry::getInstance()
中获得的singelton并搜索占位符。也许你可以模仿这种行为。
2)你有没有试过$view = Zend_Layout::getMvcInstance()->getView()
?我还没有测试控制器,但由于测试用例包括singeltons,也许这不会是一个如此遥远的猜测。