mocking - Cakephp 1.3 模拟认证

标签 mocking cakephp-1.3 simpletest

我正在尝试编写和测试 Controller 操作。这是我所拥有的:

App::import('Component', 'Auth');
App::import('Controller', 'Goals');

class GoalControllerTest extends CakeTestCase {

    function startCase() {
            echo '<h1>Starting Test Case</h1>';
            $this->Goals = new TestGoalsController();
            $this->Goals->constructClasses();
            $this->Goals->Component->initialize($this->Goals);
    }

    function endCase() {
            unset($this->Goals);
            ClassRegistry::flush();
            echo '<h1>Ending Test Case</h1>';
    }

    function startTest($method) {
            echo '<h3>Starting method ' . $method . '</h3>';
            //$this->GoalsController = new TestGoalsController();
            Mock::generate('AuthComponent');
            $this->Goals->Auth = new MockAuthComponent();
    }

    function endTest($method) {
            echo '<hr />';
    }

    function testSetHomepage() {
            //get goal for test
            $sql = "SELECT id FROM goals limit 1";
            $goal = $this->Goals->Goal->query($sql);
            $this->Goals->params = Router::parse('/goals/setHomepage/');
            $this->Goals->beforeFilter();
            $this->Goals->Component->startup($this->Goals);
            $this->Goals->params['url']['goal_id'] = $goal[0]['goals']['id'];
            $this->Goals->params['url']['set_to'] = 1;
            $this->Goals->setHomepage();

            //Mock Auth
            $this->Goals->Auth->setReturnValue('user', 1);


            //check the set
            $sql = "SELECT GoalOnHome.goal_id FROM goals_users as GoalOnHome WHERE GoalOnHome.goal_id = '" . $this->Goals->params['url']['goal_id'] . "' limit 1";
            $result = $this->Goals->Goal->query($sql);

            $expected = false;
            $this->assertEqual(empty($result), $expected);
            unset($this->Goals->params['url']);
    }
}

我正在尝试模拟身份验证组件,但在运行测试时出现此错误:

意外的 PHP 错误 [Undefined property: MockAuthComponent::$enabled] 严重性 [E_NOTICE] in

有人可以帮我解决我在这里做错的事情吗?

最佳答案

我最近遇到了同样的问题。我通过简单地设置 Mock 对象的属性来修复它。此外,我为 startup 方法配置了一个返回值 - 否则,模拟身份验证将不起作用。

function startTest() {
    // Set up controller etc.
    // ...
    $this->Goals->Auth = new MockAuthComponent();  
    $this->Goals->Auth->enabled = true; // Should solve your error
    $this->Goals->Auth->setReturnValue('startup', true);
}

关于mocking - Cakephp 1.3 模拟认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14161957/

相关文章:

PHPUnit - 创建 Mock 对象作为属性的 stub

c# - 伪造的,AutoFixture,其他(?): How to fill a nested model with fake data and set rules for specific properties?

NHibernate 测试,模拟 ISession

php - CakePHP Controller 的实际测试?

ruby - 如何测试使用 rspec 的 block 的函数

view - 蛋糕php : Check if view element exists

php - 使用 CakePHP 1.3 将图像上传到服务器

CakePHP 表单助手 - 更改复选框/单选框的隐藏输入值

php - 为什么我应该使用 PHP 测试框架?

php - 如何设置 PHP + xDebug + (x)Unit + Eclipse 以在单元测试中使用断点?