3

我正在尝试编写和测试控制器动作。这是我所拥有的:

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']);
    }
}

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

Unexpected PHP error [Undefined property: MockAuthComponent::$enabled] severity [E_NOTICE] in

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

4

1 回答 1

0

我最近遇到了同样的问题。我通过简单地在 Mock 对象上设置属性来修复它。此外,我为 -method 配置了一个返回值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);
}
于 2013-01-31T11:13:05.577 回答