【问题标题】:CakePHP AppController Components aren't inherited by Components during testing with ControllerTestCase在使用 ControllerTestCase 进行测试期间,CakePHP AppController 组件不会被组件继承
【发布时间】:2014-01-24 00:29:01
【问题描述】:

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

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

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

如果我转到有问题的控制器并在操作debug($this->components); 中使用以下代码行,我会得到以下结果:

array(
        'Auth' => array(
                'authenticate' => array(
                        'Form' => array(
                                'fields' => array(
                                        'username' => 'email'
                                )
                        )
                )
        ),
        (int) 0 => 'Session',
        (int) 1 => 'DebugKit.Toolbar'
)

但是,在单元测试期间,同一行代码将输出以下内容:

array(
        (int) 0 => 'Session'
)

控制器本身没有定义任何组件,因此没有任何导致问题的东西,不确定问题出在哪里或如何解决。

【问题讨论】:

  • 您的 AppController.php 文件在哪里?如果您在测试期间检查get_included_files(),则可能不是您的应用控制器被加载。
  • CakePHP/Cake/Test/test_app/Controller/AppController.php 正在加载,而不是我的 AppController。奇数
  • 您是否使用 composer 和 pear 安装了 CakePHP?你在加载 composer autoload.php 文件吗?
  • 是的,使用 composer 和 pear 安装。我在 bootstrap.php require APP . '/Vendor/autoload.php'; 中有以下行,以便加载作曲家 autoload.php。

标签: php unit-testing cakephp cakephp-2.4


【解决方案1】:

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

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

添加这一行可确保类加载器知道加载 AppController,而应用程序在没有它的情况下也能正常工作,最好包含它。

【讨论】:

  • 这是我在 freenode 的 #cakephp 频道中给出的解决方案 - 不记得确切的解释,但类似于确保类加载器知道要加载哪个 AppController。这对我来说似乎并不直观,如果有人能提出比这更好的解决方案,我会很高兴。
  • 事实上我现在在这里问的问题是不正确的。实际的问题是为什么 CakePHP 没有在测试中使用我的 AppController。我应该在此基础上打开一个新问题还是编辑我原来的问题?
  • 确实如此。当我在被测试的控制器中包含那行代码时,现在调用正确的(即我的应用程序中的那个)AppController。我同意它感觉不是正确的解决方案,因为应用程序本身在没有这行代码的情况下工作 - 只需要确保在单元测试期间加载了正确的 AppController。
  • 我明白了,老实说,我没有使用足够的 bake 命令,所以这可能是问题的一部分 - 没有意识到默认情况下会包含这行代码。我一直在使用 Cookbook 来帮助将我的代码整合在一起,并且控制器页面上没有提到添加它,所以到目前为止我还没有这样做。再次感谢您的帮助。
  • +1。我期待a rather different problem - 使用带有 cakephp 2.x 的作曲家有一些迄今为止意想不到的副作用。
猜你喜欢
  • 1970-01-01
  • 2011-11-27
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多