phpUnit + Zend Framework - ошибка тестирования контроллера

Tir

Новичок
phpUnit + Zend Framework - ошибка тестирования контроллера

Доброго времени суток!
Пишу под Zend Framework. Попытался прогнать разработанный мной контроллер через phpUnit-тесты. Тестировать пытался следующим образом - создал в методе тестирующего класса объект запроса (Zend_Controller_Request_Http), забросил туда URL action-а, который хотел протестировать. Создал пустой объект ответа (Zend_Controller_Response_Http). И потом всё это хозяйство забросил во фронт-контроллер, предварительно вызвав у него returnResponse(true). Вызываю во фронт-контроллере dispatch(), и вот тут то вот всё и ломается :) Попытка запустить тестирование заканчивается ошибкой "Zend_Controller_Exception: No default module defined for this application". Установка модуля во фронт-контроллере (через setDefaultModule) и в объекте запроса (через setModuleName) проблему не решили. Пробовал при создании в конструктор объекта запроса забрасывать путь до bootstrapper-а, а дальше в setParams забрасывать массив с именами модуля, контроллера и экшена (на тот случае, если ZFW неправильно парсит заброшенный в конструктор url экшена). Результат тот же. В чём может крыться причина? И как можно решить эту проблему?
 

Tir

Новичок
Автор оригинала: admin
Лучше с примерами кода :)
Да не вопрос :)
Исходник тестирующего метода:
PHP:
function testGetContent() {

	//готовим окружение: фронт-контроллер и серверные переменные
	$frontController = Zend_Controller_Front::getInstance();
	$frontController->returnResponse(true);
	$_SERVER['X_REQUESTED_WITH'] = 'XMLHttpRequest'; //типа запрос отправляется AJAX-ом
	
	//создал в методе тестирующего класса объект запроса (Zend_Controller_Request_Http), забросил туда URL action-а, который хотел протестировать
	$request = new Zend_Controller_Request_Http("http://some.domain.ru/my/rssprovider/getcontent");
	//и забросил его во фронт-контроллер
	$frontController->setRequest($request);
	//Создал пустой объект ответа (Zend_Controller_Response_Http)
	$response = new Zend_Controller_Response_Http();
	//и забросил его во фронт-контроллер
	$frontController->setResponse($response);
	//Вызываю во фронт-контроллере dispatch(), и вот тут то вот всё и ломается с ошибкой "Zend_Controller_Exception: No default module defined for this application"
	$frontController->dispatch();
	//проверяем, что там сварилось
	$this->assertContains("class=\"portlet\"", $response->getBody());
	$this->assertContains("name=\"my\\rssprovider\"", $response->getBody());

}
Исходник тестируемого экшена:
PHP:
public function getcontentAction( ) {
	/**
	 * Устанавливаем для отрисовки вью скрипт, заданный мнемоническим именем
	 * в свойстве _mnemonicViewName
	 */
	//отключаем поиск скрипта на отрисовку в подкаталогах по контроллеру
	$this->_helper->getHelper('ViewRenderer')->setNoController(true);
			
	//лепим путь до скрипта вьюхи, который лежит в модуле my
	$viewScriptPath = realpath(Zend_Controller_Front::getInstance()->getControllerDirectory('my')."/../views/scripts/common");
	
	//устанавливаем путь, где будет искаться скрипт вьюхи
	$this->view->addScriptPath($viewScriptPath);
	
	//ЗАГЛУШКО!!!
	switch ($this->_mnemonicViewName) {
		case "rss":
			$this->_helper->getHelper('ViewRenderer')->setScriptAction('rss');
			break;
	}
	
	try {
		// конфиг тоже передаем во вью
		$this->view->config = $this->config->gadgetContentConfig->toArray();
		// данные из адаптера передаем во вью
		$this->view->data = $this->_adapter->import();
	} catch (my_Adapter_Exeption $e) {
		// если ошибки были, то передать их во вью
		$this->view->message = $e->getMessage();
	}
		
}
 

StUV

Rotaredom
Tir
поправь плиз второй пост - расставив текст из первого камментами во втором - где что не работает и что там тебе непонятно
 

Tir

Новичок
Автор оригинала: StUV
Tir
поправь плиз второй пост - расставив текст из первого камментами во втором - где что не работает и что там тебе непонятно
Сделал
 
Сверху