2009-12-31 6 views
0

CakePHP 프레임 워크와 SimpleTest를 사용하여 단위 테스트를 작성하기 시작했습니다. 컨트롤러가 브라우저를 다른 페이지로 리디렉션 할 때 설명서에 a problem with the testAction method이 설명되어 있습니다. link to a possible fix으로 희망 메모가 있지만 링크가 깨졌습니다.CakePHP의 testAction 메소드가 리다이렉션 호출에서 살아남을 수 있습니까?

아무도이 작업을 얻었습니까? 깨진 링크가 가리키는 위치를 찾는 방법을 아십니까?

partial mock objects을 사용하여 리디렉션 호출을 재정의하는 방법에 대한 설명이 나와 있지만 testAction 메소드와 작동하지 않는 것으로 보입니다. 디스패처로 모의 컨트롤러를 어떻게 든 등록해야한다고 생각합니다.

여기는 similar question on Google groups입니다.

답변

1

나는 일할 것이있어, 그래서 나는 여기에 게시 할 것이라고 생각했다. 내가 아직 행복하다면 잘 모르겠다. 당신이 리디렉션을 테스트 할 수있게하려면

이 변경 :

$this->redirect(array('action'=>'index')); 

을 여기에 :

$data = array(...); 
$result = $this->testAction(
    '/people/edit/1', 
    array('method' => 'post', 'data' => $data)); 
$this->assertEqual(
    'redirected to index', 
    $result); 
:

$this->redirect(array('action'=>'index'), null, false); 
return 'redirected to index'; 

이제 테스트는 다음과 같이 보일 수 있습니다

컨트롤러의 리다이렉트 메소드의 문제점은 기본적으로 exit()를 호출하고 전체 테스트 스위트에서 빠져 나오는 것입니다. 이 버전은 false를 redirect 메소드의 $ exit 매개 변수로 전달한 다음 exit() 대신 return을 사용합니다. 반환 값은 리디렉션 헤더와 함께 브라우저에 에코되지만 테스트 케이스가 원하는 경우 유효성을 검사하기위한 것입니다. 작은 메시지 일지라도, 나는 그것에 어떤 문제도 보이지 않습니다.

exit() 대신 return을 호출 할 때 컨트롤러 메서드 다음에 실행할 수있는 중요한 코드가없는 것 같습니다. 빠른 테스트는 페이지가 정상적으로 작동 함을 보여줍니다.

+1

이 문서는 매우 오래된 내용이지만 1.3의'testAction' 문제를 완화하는 데 도움이되는 https://github.com/jeremyharris/extended_test_case를 확인할 수 있습니다. 컨트롤러의 리다이렉트 기능을 여전히 조롱하고 싶을 것이다. – jeremyharris

+0

고마워, @jeremyharris, 나는 그것을 조사 할 것이다. –

관련 문제