Zend_Test_PHPUnit_ControllerTestCase:测试视图参数而不是渲染输出

时间:2010-03-23 09:19:03

标签: php unit-testing zend-framework phpunit

我正在使用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
        );

    }
}

2 个答案:

答案 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,也许这不会是一个如此遥远的猜测。