Zend_Test_PHPUnit_ControllerTestCase и Zend_Layout не могут найти плагин Layout во время выполнения тестов - PullRequest
2 голосов
/ 05 августа 2010

Я начинаю писать несколько тестовых примеров для классов контроллеров, используя Zend Framework 1.10.6 и Zend_Test_PHPUnit_ControllerTestCase. У меня проблемы с одним элементом: во время выполнения тестов Zend_Controller_Action_HelperBroker не может найти помощника действий Layout.

Вот голые тесты моего теста:

require_once 'PHPUnit/Framework.php';
require_once 'Zend/Test/PHPUnit/ControllerTestCase.php';
require_once 'controllers/IndexController.php';

class Application_Controllers_IndexControllerTest extends Zend_Test_PHPUnit_ControllerTestCase {

    public $_application;

    protected function setUp() {
        $this->bootstrap = array($this, 'appBootstrap');
        parent::setUp ();
    }

    public function appBootstrap() {
        // Create application, bootstrap, but don't run
        $this->_application = new Zend_Application(
            APPLICATION_ENV,
            APPLICATION_PATH . '/configs/application.ini'
        );
        $this->_application->bootstrap();
        $this->getFrontController()->setParams($this->_application->getOptions())
             ->addControllerDirectory(APPLICATION_PATH . '/controllers');
    }

    public function testIndexAction() {
        $this->dispatch('/index/index');
        $this->assertController('index');
        $this->assertAction('index');
    }

}

Я получаю исключение при запуске теста:

Zend_Controller_Action_Exception: помощник действий по имени Макет не найден

Когда я закомментирую две строки в классе Zend_Controller_Action_HelperBroker, чтобы попытаться найти источник этого вокруг строки 368, я получаю:

Zend_Loader_PluginLoader_Exception: плагин с именем 'Layout' не найден в реестре; используемые пути: Zend_Controller_Action_Helper_: Zend / Контроллер / Действие / Помощник /

Загрузка скриптов макета работает нормально в моем приложении при запуске, кажется, что правильный путь или реестр для Zend_Controller_Action_Helper не может быть найден при запуске тестов под PHPUnit, и, следовательно, плагин Layout не может быть загружен. *

Я убедился, что Zend установлен правильно и что Layout.php находится в правильном месте.

Есть идеи?

Del

Ответы [ 3 ]

3 голосов
/ 26 апреля 2012

В вас appBootstrap () в конце поместите эту строку:

    Zend_Controller_Action_HelperBroker::addHelper(new Zend_Layout_Controller_Action_Helper_Layout);
0 голосов
/ 03 декабря 2010

Мой обходной путь:

function someAction() {
    // workaround for unit tests 'Action Helper by name Layout not found'
    if ($this->_helper->hasHelper('layout')) {
        $this->_helper->layout->disableLayout(); // disable layouts
    }
    ...
0 голосов
/ 02 сентября 2010

В какой момент вы добавляете свой код макета?

Помните, что «boostraping» отличается при запуске теста PHPUnit и что вещи, загружаемые в основное приложение, могут не работать при выполнении теста PHPUnit.

...