웹 서비스에서 JSON 객체를 가져 오는 모델을 호출하는 컨트롤러 액션이 있습니다. JSON 객체는 mapper 클래스를 통해 PHP 객체로 변환되어 내보기에서 사용됩니다.Zend Framework에서 모의 객체로 뷰 렌더링을 테스트합니다.
웹 서비스 응답을 조롱하고 내 매퍼 클래스를 호출하여 PHP 객체에 응답을 매핑 한 다음 내 객체에서 해당 객체를 사용하는 단위 테스트를 작성하고 싶습니다. 이렇게하면 assertQueryContentContains()
을 사용하여 값이 내 개체에 제대로 매핑되고 내보기에 채워 졌는지 확인할 수 있습니다.
가장 좋은 방법은 무엇입니까?
지금까지, 내 단위 테스트 클래스에서이있어 :
$view->search_session = new Zend_Session_Namespace('search');
Zend_Registry::set('is_mobile', false);
$view = new Zend_View();
$view->setScriptPath(APPLICATION_PATH . '/views/scripts/');
$view->addHelperPath(APPLICATION_PATH . '/views/helpers');
$layout = Zend_Layout::getMvcInstance()->setLayoutPath(APPLICATION_PATH . '/layouts/scripts/')->setLayout('layout-internal');
$layout->setView($view);
$mapper = new ListingDetailMapper();
$listing = $mapper->map($this->_createMockListing(), new ListingDetail());
$view->listing = $listing;
$this->getResponse()->setBody($layout->render());
$this->assertQueryContentContains('h3.fn', 'Test Business');
나는이 함께이 문제는 내가 수동으로 일반적으로 내 부트 스트랩에 설치 될 설치 모두에 봉착한다는 것입니다
또는 요청 파일을 정상적으로 디스패치하는 경우 구성 파일.
모의 객체를 내 뷰에 삽입하는 방법이 있습니까? $this->dispatch()
을 사용하여 컨트롤러 동작을 디스패치하면 자동으로 뷰를 렌더링 할 수 있습니까?
아니면 웹 서비스 응답을 반환하고 어떻게 든 내 컨트롤러에 주입하는 모델 클래스를 조롱해야합니까?
내가 마치 $this->dispatch()
라고 불렀던 것처럼 내 환경을 다시 만들어야하는 것으로 너무 힘들어하고있는 것처럼 보입니다. 또한 실제 환경에서와 동일한 설정 코드를 사용하지 않는 경우 테스팅의 목적에 어긋납니다.
답변 해 주셔서 감사합니다. 당신은 내 다른 질문에 답했습니다. 그리고 평소와 같이, 당신은 큰 도움이되었습니다. 당신은 그것이 있어서는 안되는 것에 대해 인식하고 있다는 것에 대해 절대적으로 옳습니다. 나는 당신의 제안을 고려하여 몇 가지 것을 다시 생각 해냈다.레지스트리에 대한 참조가 레이아웃에 있었고 뷰를 테스트하기 위해 레이아웃을 인스턴스화 할 필요가 없었습니다. 컨트롤러가 세션 요소를 처리하도록 허용하는 것은 유닛 테스트에서 볼 수있는 것을 나타 내기 위해 뷰 변수를 설정할 수 있습니다. 결국, 나는 더 간단한 테스트로 끝내었다. 다시 한번 감사드립니다. – Luke
코드를 테스트하려는 사람은 내 친구입니다.). 기꺼이 도와 드리겠습니다. 저는이 모든 것을 힘들게 배웠습니다. 그래서 저는 자동화 된 테스트 사랑을 퍼트 리려고합니다. – SamHennessy