当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在Zend_Test工具中执行ZendFramework控制器时设置正确的InvokeArg》经验,为你挑选了1个好方法。

根据此邮件列表讨论,访问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) -

发表评论有助于强调这一点.



1> 小智..:

当使用需要引导程序的控制器插件时,我遇到了同样的问题.

基本上我创建了一个抽象类并从中继承.

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) -

发表评论有助于强调这一点.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有