【问题标题】:Creating Mock Auth Object in CakePHP Controller Test在 CakePHP 控制器测试中创建 Mock Auth 对象
【发布时间】:2014-01-03 16:50:11
【问题描述】:

刚开始在我的 CakePHP 应用程序中为我的控制器创建一些单元测试,但是我完全不知道应该如何为 Auth 组件创建一个模拟,我已经阅读了 CookBook 并认为我做对了,但是一直被抛出这个错误。

Error: Call to a member function allow() on a non-object    

在我正在测试的控制器中有一个 beforeFilter 函数,代码如下:

public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow('create');
}

在我的测试中,我包含了以下内容:

$Leagues = $this->generate('Leagues', array(
    'components' => array(
        'Auth'
    )
));

我也玩过staticExpects(),但它似乎没有太大影响(我也不确定我需要在staticExpects() 中添加什么)。

【问题讨论】:

    标签: unit-testing cakephp cakephp-2.4


    【解决方案1】:

    模拟是什么意思?只是用你设置的数据填充一个对象?你得到的错误是因为你需要使用

    $this->Auth->allow(array('create'))

    【讨论】:

    • 关于我在说什么:book.cakephp.org/2.0/en/development/… - 我已经尝试过你的建议,但也不起作用,并且与烹饪书中关于 Auth 的建议不符->允许book.cakephp.org/2.0/en/core-libraries/components/…
    • 如果我使用您的代码,我会收到以下错误:'间接修改重载属性 Mock_LeaguesController_173b7f97::$Auth 无效'
    • 我更新了我的回复。试试看。我一直使用我原来的答案,但似乎有不止一种方法可以做到这一点。就此而言,您使用的是什么版本的 Cake?
    • 使用 2.4.4 我没有遇到 Auth 允许工作的问题,我尝试过的每个版本都适用于实际应用程序,但是当我尝试测试控制器时,我在模拟身份验证对象时遇到问题.
    【解决方案2】:

    发现问题 - 我已将 Auth 组件包含在 AppController.php 中,而不是专门包含在我尝试测试的控制器中。通过将它包含在我的控制器中,错误就消失了。

    【讨论】:

    • 不会接受这个作为答案,除非有人回来提供不同的解决方案,这并不意味着我需要重新包含组件。
    猜你喜欢
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多