CakePHP AppController组件不是';在使用ControllerTestCase进行测试期间,组件继承的t

CakePHP AppController组件不是';在使用ControllerTestCase进行测试期间,组件继承的t,php,unit-testing,cakephp,cakephp-2.4,Php,Unit Testing,Cakephp,Cakephp 2.4,我正在为我的控制器编写一些单元测试,但是我遇到了一个问题,在测试期间,AppController文件中定义的组件似乎没有被继承到控制器中 例如,在我的AppController.php文件中,我有以下内容: public $components = array('Auth' => array( 'authenticate' => array( 'Form' => array( 'fi

我正在为我的控制器编写一些单元测试,但是我遇到了一个问题,在测试期间,AppController文件中定义的组件似乎没有被继承到控制器中

例如,在我的AppController.php文件中,我有以下内容:

public $components = array('Auth' => array(
        'authenticate' => array(
                'Form' => array(
                        'fields' => array('username' => 'email')
                )
        )
), 'Session', 'DebugKit.Toolbar');
array(
        (int) 0 => 'Session'
)
如果我转到有问题的控制器,并在操作
debug($this->components)中使用以下代码行我得到以下结果:

array(
        'Auth' => array(
                'authenticate' => array(
                        'Form' => array(
                                'fields' => array(
                                        'username' => 'email'
                                )
                        )
                )
        ),
        (int) 0 => 'Session',
        (int) 1 => 'DebugKit.Toolbar'
)
但是,在单元测试期间,同一行代码将输出以下内容:

public $components = array('Auth' => array(
        'authenticate' => array(
                'Form' => array(
                        'fields' => array('username' => 'email')
                )
        )
), 'Session', 'DebugKit.Toolbar');
array(
        (int) 0 => 'Session'
)

控制器本身中没有定义任何组件,因此不存在导致问题的任何东西,也不确定问题是什么或如何解决

我没有烘焙我的应用程序控制器,所以我丢失了一些代码行。为确保加载了正确的AppController,需要在控制器顶部显示以下代码行

App::uses('AppController', 'Controller');

添加这一行可以确保类加载器知道加载AppController,而应用程序在没有它的情况下也可以工作,最好将其包括在内。

您的AppController.php文件在哪里?如果在测试过程中选中“获取包含的文件()”
,则加载的可能不是您的应用程序控制器。加载的是CakePHP/Cake/Test/Test\u app/controller/AppController.php,而不是我的AppController。你是用composer和pear安装CakePHP的吗?您正在加载composer autoload.php文件吗?是的,使用composer和pear安装。我在bootstrap.php
require应用程序中有下面一行代码/供应商/autoload.php'以便加载composer autoload.php。这是我在freenode上的#cakephp频道中给出的解决方案-记不起确切的解释,但可以确保类加载器知道要加载哪个AppController。这对我来说似乎不直观,如果有人能想出比这更好的解决方案,我会很高兴。事实上,我现在问的问题是不正确的。实际问题是为什么CakePHP在测试中不使用我的AppController。我应该在这个基础上提出一个新问题,还是编辑我的原始问题?确实如此。现在,当我在正在测试的控制器中包含该行代码时,将调用正确的(即应用程序中的)AppController。我同意它感觉不是正确的解决方案,因为应用程序本身没有这一行代码-它只需要确保在单元测试期间加载正确的AppController。我明白了,老实说,我没有充分使用bake命令,所以这可能是问题的一部分——我没有意识到默认情况下会包含代码行。我一直在使用Cookbook来帮助我整合代码,控制器页面上没有提到添加代码,所以到目前为止我还没有这样做。再次感谢你的帮助。我一直在期待——将composer与cakephp 2.x结合使用会产生一些意想不到的副作用。