2012-05-14 6 views
2

내 컨트롤러 중 하나에서 권한을 테스트하여 확실한 종류의 사용자 만 일부 작업에 액세스 할 수 있는지 확인하려고합니다. 그러나 테스트를 실행할 때 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()가 필요합니다. admin 또는 root가 아닌 다른 역할을 가진 사용자가 admin에서 작업에 액세스하려고 시도하고 실패합니다.

+1

? 가장 깨끗한 방법은 조롱 된 params/조롱 한 요청으로 직접 isAuthorized를 테스트하는 것입니다. – nanoman

답변

0

모의 메소드를 정의하지 않고 인증 컴포넌트를 조롱하면 기본적으로 모든 메소드가 조롱됩니다. 세션 같은

당신은 그것을 방법을 전달하지 않음으로써 전체 클래스를 스텁 선택할 수 : 책에서

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

:이 솔루션은 조롱하고자하는 특정 AuthComponent 방법을 조롱하는 것 위의 예에서.

참조 : 당신이 다음 현재 세션 사용자를 조롱 어떻게 http://book.cakephp.org/2.0/en/development/testing.html#using-mocks-with-testaction

관련 문제