Zend Framework で使用するために作成したライブラリがあります。その中に、Company/Controller/Action.php
すべてのアプリケーションコントローラーが拡張されているものがあります。これは非常に単純で、コントローラーに何かを注入するだけです (Doctrine のエンティティーマネージャーなど)。
単体テストを機能させようとしていますが、Company_Controller_Action
クラス内からブートストラップを取得できないという問題に遭遇しました (これは を拡張しますZend_Controller_Action
):
function preDispatch()
{
$bootstrap = $this->getInvokeArg('bootstrap');
}
$bootstrap
この時点で null です。誰にも理由がありますか?ブートストラップが呼び出され、フロント コントローラーをフェッチできることを確認しましたが、ブートストラップを取得できません (getInvokeArg またはフロント コントローラーのいずれかを使用)。
これは、通常の本番環境および開発環境で機能します。私の application.ini のテスト セクションは、本番環境から継承しているだけなので、同じはずです。
これは私が私の中でやっていることですsetUp()
:
public function setUp()
{
$this->bootstrap = new Zend_Application(
'testing',
APPLICATION_PATH . '/configs/application.ini'
);
parent::setUp();
}
私の Bootstrap.php:
<?php
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'testing'));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
私のphpunit.xml:
<phpunit bootstrap="./Bootstrap.php" colors="true">
<testsuite name="Application Test Suite">
<directory>./application</directory>
</testsuite>
<filter>
<whitelist>
<directory suffix=".php">../application/</directory>
<exclude>
<directory suffix=".php">../application/Entities</directory>
<directory suffix=".php">../application/modules/default/views</directory>
<file>../application/Bootstrap.php</file>
<file>../application/modules/default/controllers/ErrorController.php</file>
</exclude>
</whitelist>
</filter>
<logging>
<log type="coverage-html" target="./log/report" title="PrintConcept" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
<log type="testdox" target="./log/testdox.html" />
</logging>
</phpunit>
更新:上記の構成を使用すると、 My$bootstrap
は null ではなくなりました。