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 オブジェクトにプロパティを設定するだけで修正しました。さらに、startup-method の戻り値を構成しました。そうしないと、模擬認証が機能しません。

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 に答える