根据此邮件列表讨论,访问Zend MVC控制器中的应用程序资源的推荐方法是:
$this->getInvokeArg('bootstrap')->getResource('foo');
这适用于生产(浏览到相应的网页时).但是,在测试包含此代码的控制器操作时Zend_Test_PHPUnit_ControllerTestCase
,我得到:
PHP致命错误:在第12行的.../application/controllers/IndexController.php中的非对象上调用成员函数getResource()
在介绍那个getInvokeArg
东西之前,测试运行得很好.问题是,如何在测试工具中使用"推荐"方式访问资源?
刚检查:$this->getFrontController()->getParam('bootstrap')->getResource('foo')
也不起作用.
更新:我确实调用了应用程序引导程序,phpunit --bootstrap ./scripts/application_bootstrap.php ...
我知道它执行正常.
我有:
$application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap();
小智.. 9
当使用需要引导程序的控制器插件时,我遇到了同样的问题.
基本上我创建了一个抽象类并从中继承.
abstract class My_ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase { protected $application; public function setUp() { $this->bootstrap = array($this, 'appBootstrap'); return parent::setUp(); } public function appBootstrap() { $this->application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/config/app.ini'); $this->application->bootstrap(); $bootstrap = $this->application->getBootstrap(); $front = $bootstrap->getResource('FrontController'); $front->setParam('bootstrap', $bootstrap); } }
然后你使用如下:
class MyControllerTest extends My_ControllerTestCase { }
我还记录了一个请求,让这个功能成为ZF的一部分
[ZF-7373] :( http://framework.zend.com/issues/browse/ZF-7373) -
发表评论有助于强调这一点.
当使用需要引导程序的控制器插件时,我遇到了同样的问题.
基本上我创建了一个抽象类并从中继承.
abstract class My_ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase { protected $application; public function setUp() { $this->bootstrap = array($this, 'appBootstrap'); return parent::setUp(); } public function appBootstrap() { $this->application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/config/app.ini'); $this->application->bootstrap(); $bootstrap = $this->application->getBootstrap(); $front = $bootstrap->getResource('FrontController'); $front->setParam('bootstrap', $bootstrap); } }
然后你使用如下:
class MyControllerTest extends My_ControllerTestCase { }
我还记录了一个请求,让这个功能成为ZF的一部分
[ZF-7373] :( http://framework.zend.com/issues/browse/ZF-7373) -
发表评论有助于强调这一点.