2

Zend Framework 1.10.6 と Zend_Test_PHPUnit_ControllerTestCase を使用して、コントローラー クラスのテスト ケースを書き始めています。テスト ケースの実行中に Zend_Controller_Action_HelperBroker が Layout アクション ヘルパーを見つけられないという問題が 1 つあります。

私のテストケースの骨子は次のとおりです。

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 の 2 行をコメント アウトして、368 行目あたりのソースを見つけようとすると、次のようになります。

Zend_Loader_PluginLoader_Exception: 'Layout' という名前のプラグインがレジストリに見つかりませんでした。使用するパス: Zend_Controller_Action_Helper_: Zend/Controller/Action/Helper/

私のアプリケーションでは、実行時にレイアウト スクリプトの読み込みが正常に機能します。PHPUnit でテストを実行しているときに、Zend_Controller_Action_Helper の正しいパスまたはレジストリが見つからないため、レイアウト プラグインを読み込むことができないようです。

Zend が正しくインストールされ、Layout.php が正しい場所にあることを確認しました。

何か案は?

デル

4

3 に答える 3

3

appBootstrap ()の最後に次の行を配置します。

    Zend_Controller_Action_HelperBroker::addHelper(new Zend_Layout_Controller_Action_Helper_Layout);
于 2012-04-26T11:59:42.700 に答える
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
    }
    ...
于 2010-12-03T07:21:16.003 に答える
0

どの時点でレイアウト コードを追加しますか?

PHPUnit テストを実行する場合は「ブートストラップ」が異なり、メイン アプリでブートストラップされるものは、PHPUnit テストとして実行する場合はそうではない可能性があることに注意してください。

于 2010-09-01T23:09:22.573 に答える