我开始使用Zend Framework 1.10.6和Zend_Test_PHPUnit_ControllerTestCase为控制器类编写一些测试用例。我遇到一个问题,即测试用例正在运行时,Zend_Controller_Action_HelperBroker无法找到布局操作助手。
以下是我的测试用例的基本内容:
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:在注册表中找不到名称'Layout'的插件;使用路径: Zend_Controller_Action_Helper_:Zend / Controller / Action / Helper /
在运行时加载布局脚本在我的应用程序中工作正常,看起来在PHPUnit下运行测试时无法找到Zend_Controller_Action_Helper的正确路径或注册表,因此无法加载布局插件。
我已经验证Zend已正确安装且Layout.php位于正确的位置。
有什么想法吗?
德尔
答案 0 :(得分:3)
在你最后的 appBootstrap()这一行:
Zend_Controller_Action_HelperBroker::addHelper(new Zend_Layout_Controller_Action_Helper_Layout);
答案 1 :(得分:0)
您在何时添加布局代码?
请记住,在运行PHPUnit测试时,'boostraping'是不同的,并且在主应用程序中引导的东西可能不是在作为PHPUnit测试运行时。
答案 2 :(得分: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
}
...