1

in the tutorial처럼 간단한 액세스 단위 테스트를 만들고 싶습니다.Zend Framework 2 - UnitTests

내 프로젝트는 인증을 위해 ZFCUser을 사용합니다.

결과 내 (분명히 인증되지 않은) 테스터는 (302)의 HTTP response 등을하지 예상

그것에 대해 할 수있는 모든 아이디어 200? 감사!

튜토리얼의 코드는 다음과 같습니다의 너무 많은 코멘트로를 눌러 때문에 나는 대답으로 이것을 게시하도록하겠습니다

public function testAddActionCanBeAccessed() 
{ 
    $this->routeMatch->setParam('action', 'add'); 

    $result = $this->controller->dispatch($this->request); 
    $response = $this->controller->getResponse(); 

    $this->assertEquals(200, $response->getStatusCode()); 
} 
+0

당신이 테스트 한 코드를 조사하십시오;) (비록 내가 도울 수 없을지라도, 다른 사람들이 당신의 테스트를 보게 될지 모르지만) – Sam

+0

내가 말했듯이, 그 아주 간단한 테스트입니다. 난 그냥 테스터에 대한 인증을 우회해야 ... 그리고이 문제에 대한 나는 어떤 코드가 없어;) – Ron

+0

테스트하고 싶니? 당신의'add' 액션은 ** 인증 될 때 ** 할 수 있습니까? 그런 다음 인증 서비스를 조롱하고 거기에 ID를 입력하여 컨트롤러가 유효한 인증을 허용하는지 테스트 할 수 있습니다. 확실한 것은 인증되지 않은 요청으로 인해 현재 리디렉션이 발생한 경우도 테스트하십시오. –

답변

3
thanks, good idea! is there an easy way to mock the auth? – Ron 

. 예, AuthenticationService 클래스를 조롱하는 쉬운 방법이 있습니다. 우선, Stubs/Mocks에있는 문서를 확인하십시오.

Zend \ Authentication \ AuthenticationService에서 모의 ​​객체를 생성하고 신원을 포함하는 것처럼 가장하도록해야합니다.

public function testSomethingThatRequiresAuth() 
{ 
    $authMock = $this->getMock('Zend\Authentication\AuthenticationService'); 
    $authMock->expects($this->any()) 
      ->method('hasIdentity') 
      ->will($this->returnValue(true)); 

    $authMock->expects($this->any()) 
      ->method('getIdentity') 
      ->will($this->returnValue($identityMock)); 

    // Assign $authMock to the part where Authentication is required. 
} 

이 예에서 변수 $identityMock은 이전에 정의되어야합니다. 그것은 당신의 사용자 모델 클래스 또는 그와 비슷한 것일 수 있습니다.

테스트하지 않았으므로 즉시 작동하지 않을 수 있습니다. 그러나, 그 방금 당신에게 방향을 보여 주기로되어 있습니다.

+0

이 멍청한 질문에 대해 미안하지만'$ authMock'과 내 함수를 연결하는 방법을 어떻게 만드나요? 좋은 예가 될 것입니다! – Ron

+2

@Ron은 바보 같은 질문이 아닙니다. serviceLocator를 사용하여 AuthenticationService를 얻는 경우 http://www.afewmorelines.com/mocking-user-identities-in-zf2-action-controller-unit-tests/를 참조하십시오. – imel96