脚本宝典收集整理的这篇文章主要介绍了php – 在Zend_Test工具中执行Zend Framework控制器时设置正确的InvokeArg,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
$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();
问题在于Zend_Test_PHPUnit_ControllerTestCase用于单元测试控制器.它尝试从框架的其余部分使用非常少的依赖项,并且它不会自动运行/ bootstrap /任何(并且不知道)您的大型应用程序.
基本上,getResouce不起作用,因为你的bootstrap不存在.
如果您浏览Zend_Test_PHPUnit_ControllerTestCase,您将看到它手动设置并使用Zend_Controller_Front,并为每个测试初始化自己的请求/响应对象.它试图尽可能多地进行单元测试,而不是功能测试或集成测试.
要解决您的问题,您必须告诉测试套件如何引导您的应用程序.有几种方法可以实现这一目标.
public $bootstrap = '/path/to/bootstrap/file.PHP'
对于使用Zend_Application的应用程序,这是一个不错的选择.
public function SETUP() { // Use the 'start' method of a Bootstrap object instance: $bootstrap = new Bootstrap('test'); $this->bootstrap = array($bootstrap,'start'); parent::setUp(); }
编辑2:好的,你实际上正在引导你的应用程序.所以,你已经完成了上述工作,但仍然没有运气.
我建议覆盖TestCase的调度方法,以确保它正在接收引导程序. (这肯定会起作用).
public function dispatch($url = null) { $this->getFrontController()->setParam('bootstrap',$yourBootstrap); parent::dispatch($url); }
这将允许测试套件正确模仿由Zend_Application构造的前端控制器的行为.访问引导程序的两种方法现在都可以使用.
以上是脚本宝典为你收集整理的php – 在Zend_Test工具中执行Zend Framework控制器时设置正确的InvokeArg全部内容,希望文章能够帮你解决php – 在Zend_Test工具中执行Zend Framework控制器时设置正确的InvokeArg所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。