2012-05-14 10 views
2

私のコントローラの1つで承認をテストしようとすると、特定の種類のユーザーだけが何らかのアクションにアクセスできることを確認しています。しかし、AppControllerのisAuthorized()メソッドは、テストを実行しているときには呼び出されません。Controllerテストを実行しているときisAuthorized()が呼び出されないのはなぜですか?

public function isAuthorized($user = null){ 
    if(!isset($this->request->params['admin'])){ 
     return true; 
    } 

    return in_array($user['role'], array('admin', 'root')); 
} 

私のテスト機能:これは、メソッドがどのように見えるかである私は、AuthComponentのをからかっ多くのものを試して、それをからかっていない

public function testArticlesIndex() { 
    $this->generate('Articles', array(
     'components' => array('Auth') 
    )); 

    $this->testAction('/admin/articles', array('return' => 'view')); 
    $this->assertEmpty($this->view); 
} 

。私はこの状況を再現する方法を得ることができませんでした。isAuthorized()が必要です。管理者またはroot以外の役割を持つユーザーがadminのアクションにアクセスしようとすると失敗します。

+1

?私は最もクリーンな方法は、模倣されたparams/mockedリクエストでisAuthorizedを直接テストすることだと思います。 – nanoman

答えて

0

模擬するメソッドを定義せずにAuthコンポーネントをモックすると、デフォルトですべてのメソッドがモックされます。あなたは、それにメソッドを渡していないことで、クラス全体をスタブにし、セッションのような を選択することができます

:本から

$this->generate('Articles', array(
    'components' => array(
    'Auth' => array(
     'redirect' // only mocks AuthComponent::redirect() 
    ) 
    ) 
)); 

:ソリューションは、あなたが嘲笑したい特定のAuthコンポーネントのメソッドをモックすることです上記の例では、

を参照してください:あなたは、現在のセッションのユーザーを欺くにはどうすればよいhttp://book.cakephp.org/2.0/en/development/testing.html#using-mocks-with-testaction

関連する問題