2010-08-05 2 views
2

Я начинаю писать некоторые тестовые примеры для классов контроллеров с использованием Zend Framework 1.10.6 и Zend_Test_PHPUnit_ControllerTestCase. У меня возникают проблемы с одним элементом, который заключается в том, что, пока тестовые примеры запущены, Zend_Controller_Action_HelperBroker не может найти помощник действия Layout.Zend_Test_PHPUnit_ControllerTestCase и Zend_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: Action Helper по имени макета не найден

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

Zend _Loader_PluginLoader_Exception: плагин по имени «Макет» не найден в реестре; используемые пути: Zend_Controller_Action_Helper_: Zend/Controller/Action/Helper/

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

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

Любые идеи?

ответ

3

В вас appBootstrap() в конечном месте эта линия:

Zend_Controller_Action_HelperBroker::addHelper(new Zend_Layout_Controller_Action_Helper_Layout); 
0

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

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

0

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

function someAction() { 
    // workaround for unit tests 'Action Helper by name Layout not found' 
    if ($this->_helper->hasHelper('layout')) { 
     $this->_helper->layout->disableLayout(); // disable layouts 
    } 
    ...