php – 在Zend_Test工具中执行Zend Framework控制器时设置正确的InvokeArg

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 在Zend_Test工具中执行Zend Framework控制器时设置正确的InvokeArg脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
根据 this邮件列表讨论,访问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();
编辑:对不起,我第一次错过了你的那部分问题(还没有咖啡!).我编辑了答案.

问题在于Zend_Test_PHPUnit_ControllerTestCase用于单元测试控制器.它尝试从框架的其余部分使用非常少的依赖项,并且它不会自动运行/ bootstrap /任何(并且不知道)您的大型应用程序.

基本上,getResouce不起作用,因为你的bootstrap不存在.

如果您浏览Zend_Test_PHPUnit_ControllerTestCase,您将看到它手动设置并使用Zend_Controller_Front,并为每个测试初始化​​自己的请求/响应对象.它试图尽可能多地进行单元测试,而不是功能测试或集成测试.

解决您的问题,您必须告诉测试套件如何引导您的应用程序.有几种方法可以实现这一目标.

一,您可以将文件分配给测试类的公共引导属性.

public $bootstrap = '/path/to/bootstrap/file.PHP'

对于使用Zend_Application的应用程序,这是一个不错的选择.

或者,通过提供bootstrap属性的回调:

public function SETUP()
{
    // Use the 'start' method of a Bootstrap object instance:
    $bootstrap = new Bootstrap('test');
    $this->bootstrap = array($bootstrap,'start');
    parent::setUp();
}

注意:如果覆盖它,则调用父setUp方法非常重要.

编辑2:好的,你实际上正在引导你的应用程序.所以,你已经完成了上述工作,但仍然没有运气.

我建议覆盖TestCase的调度方法,以确保它正在接收引导程序. (这肯定会起作用).

public function dispatch($url = null)
{
    $this->getFrontController()->setParam('bootstrap',$yourBootstrap);
    parent::dispatch($url);
}

想想看,你也可以在setUp中做到一点.

这将允许测试套件正确模仿由Zend_Application构造的前端控制器的行为.访问引导程序的两种方法现在都可以使用.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 在Zend_Test工具中执行Zend Framework控制器时设置正确的InvokeArg全部内容,希望文章能够帮你解决php – 在Zend_Test工具中执行Zend Framework控制器时设置正确的InvokeArg所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。