문제

Zend Framework로 만든 현재 프로젝트에 대한 테스트를 작성하고 있습니다. 모든 것이 괜찮지 만 기록 된 사용자 작업/컨트롤러를 테스트하는 데 문제가 있습니다. 작업/컨트롤러를 수행하려면 로그인해야합니다.

phpunit에 어떻게 로그인 할 수 있습니까?

도움이 되었습니까?

해결책

작업/컨트롤러를 테스트하고 싶다고 말하면서 단위 테스트를 작성하는 것이 아니라 기능/통합 테스트 (예 : 작업) Zend_Test 및 MVC를 통한 테스트.

다음은 프로젝트에서 사용한 테스트 기능이 있습니다. 로그인이 괜찮은 경우 테스트하고 있습니다.

public function testLoggingInShouldBeOk()
{
    $this->dispatch('/login/login');
    $csrf = $this->_getLoginFormCSRF();
    $this->resetResponse();
    $this->request->setPost(array(
        'login' => 'LOGIN',
        'password' => 'PASSWORD',
        'csrfLogin' => $csrf,
        'ok' => 'Login',
    ));
    $this->request->setMethod('POST');
    $this->dispatch('/login/login');
    $this->assertRedirectTo('/');
    $this->assertTrue(Zend_Auth::getInstance()->hasIdentity());
}

간단히 말해서 로그인 양식을로드하고 CSRF 토큰을 추출하고 양식을 채우고 게시하고 게시합니다.

그런 다음 연결되어 있는지 테스트 할 수 있습니다.


이를 통해 로그인 부품을 추출하여 유효한 사용자를 로그인 해야하는 각 테스트 전에 호출 할 수 있습니다.

다른 팁

다른 방법이 있습니다. 내 User 엔티티 나는 a login() 사용자의 ID를 세션과 정적 변수에 넣는 메소드. 내가 테스트에서 방금하는 일 setUp() 전화입니다 $user->login() 그리고 그것은 작동합니다. 테스트 환경에서 세션이 사용되지 않습니다 (설정 Zend_Session::$isUnitTested = true 이 효과가 있음) 및 테스트는 정적 변수에 의존합니다. 정적 변수를 지우는 것을 잊지 마십시오 (logout() 사용자) on tearDown().

이 기사가 도움이 될 수 있다고 생각합니다.http://perevodik.net/en/posts/7/환경을 로그인하는 사용자와 동등한 상태로 설정하는 데 사용할 수있는 가짜 신원을 만드는 방법을 설명합니다.

Pascal 은이 기능을 사용하는 것과 거의 같은 방식으로 다음과 같습니다.

$this->_getLoginFormCSRF();

양식 요소 관리자를 사용하여 양식을로드하여 값을 반환하는 일반적인 기능을 만들었습니다.

공개 함수 _getcsrfhashvaluefromform ($ cormalias, $ csrfname) {$ form = $ this-> servicemanager--> get ( 'formelementmanager')-> get ($ cormalias); return $ form-> get ($ csrfname)-> getValue (); }

물론 이것은 CSRF가 Fieldset 등이 아닌 양식에 묶여 있다고 가정합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top