Zend_Test - настройка перенаправления в плагине контроллера для PHPUnit - PullRequest
4 голосов
/ 25 августа 2010

Я пытался использовать PHPUnit для тестирования приложения. У меня все работает, но я не могу проверить перенаправления.

Мои перенаправления происходят внутри плагина контроллера Acl, а не внутри действия в контроллере.

Я изменил их, чтобы использовать предложенный формат

$r = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
$r->gotoSimple("index", "index", "default");

Но это не помогло в тестах, тело ответа пустое, и я получаю сообщения об ошибках типа

Zend_Dom_Exception: Cannot query; no document registered

Если я затем изменю тест, чтобы метод отправки не вызывал gotoSimple(), тогда тест выполняется правильно.

Как я должен выполнять перенаправление в моем приложении, чтобы оно правильно работало с объектом ответа Zend_Test?

Документы Zend охватывают это примерно в две строки, которые я пробовал, и они терпят неудачу.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 25 августа 2010

Чтобы проверить, что перенаправление произошло, вам нужно добавить

$this->assertRedirectTo( 'index' );

после запуска $this->dispatch();

Вы не можете запросить тело ответа, так как оно пустое в случае перенаправления (отсюда ваше исключение).
Вы всегда можете проверить, как на самом деле выглядит ответ, набрав

print_r( $this->getResponse() );
3 голосов
/ 25 августа 2010

Убедитесь, что ваши действия возвращают что-либо после перенаправлений, потому что Zend_Test_PHPUnit отключает перенаправления , поэтому также выполняется код после перенаправления.

$r = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
$r->gotoSimple("index", "index", "default");
return;

или

$r = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
return $r->gotoSimple("index", "index", "default");

Для проверки самого перенаправления вы можете использовать assertRedirect* утверждений.

Прочтите вышеприведенное руководство, поскольку есть важные замечания о хуках действий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...