2011-02-22 5 views
1

모든보기 도우미의 상태를 재설정하는 방법이 있습니까? 예를 들어 headScript()으로 추가 한 모든 스크립트를 제거 할 수 있습니까? 한 단위 테스트에서 추가 된 스크립트와 메타 태그는 각 테스트마다 새 컨트롤러와 뷰를 만들지 만 다음 단위 테스트에서 볼 수 있습니다. 이것은 거짓 긍정과 부정을 일으키는 것입니다.Zend Framework의 모든보기 도우미 재설정

+0

왜 그냥 phpunit을 (내가 개봉 된 ZF와 phpunit을을 isng 가정)의 설치/해체 방법을 사용하십시오

이 사용하는 모든 자리 표시 자 기반의 뷰 헬퍼의 상태를 재설정하려면? – prodigitalson

+0

Zend_Registry :: _ unsetInstance();를 사용하여 teardown 메소드에서 Zend_Registry를 지울 수 있습니다. – Marcin

+0

@prodigitalson - 예, 우리는 PHPUnit을 사용하고 있습니다. 그러나 문제는 뷰 헬퍼를 지우려면'tearDown()'에 무엇을 넣어야할지 모르겠습니다. –

답변

3

마르신의 코멘트는 우리의 테스트에서 문제의 근본 원인에 나를 인도 : 그래서, 이론적으로, 당신은 빈 배열 (완전히 테스트되지 않은)를 전달하여 모든 값을 지우려면 exchangeArray 방법을 사용할 수있을 것 프레임 워크는 레지스트리의 스냅 샷을 사용하는 코드가 실행되기 전에 자리 표시 자 레지스트리가 Zend 레지스트리에 추가되는 것입니다. 따라서 모든 새 레지스트리 개체를 제거하는 코드가 실행되면 더 이상 자리 표시 자 레지스트리가 제거되지 않습니다.

$registry = Zend_Registry::getInstance(); 
unset($registry['Zend_View_Helper_Placeholder_Registry']); 
+0

니스, 훨씬 나아졌습니다! – typeoneerror

+0

이것은 _ 전체 _ 자리 표시자를 날려 버릴 것입니다. 약간의 촬영이 먼저, 나중에 질문, IMO. –

+0

@JasonTFeatheringham - 바로 그 점입니다. 각 단위 테스트는 이전에 실행 된 테스트의 영향을받지 않고 완전히 격리되어 실행되어야합니다. –

4

해당 컨테이너의 추상 클래스 (Zend_View_Helper_Placeholder_Container_Abstract)를 살펴보면, ArrayObject으로 확장 된 것을 알 수 있습니다. set 언제든지 Array 값을 설정 한 값을 래핑하는 배열로 바꿉니다. append 일 때 이전 값을 가져오고 새 값을 배열로 이동하지 않습니다.

$this->view->headScript()->exchangeArray(array()); 
+0

모든 자리 표시 자 기반보기 도우미에 대해 이렇게하는 것이 최후의 수단 이었지만 포인터에 감사드립니다. 그건 분명히 트릭을 할 것입니다. –

관련 문제