Zend Framework v1.11.0 を使用して Web アプリケーションに取り組んでいますが、コントローラー テスト用の正しいテスト環境をセットアップできません。Zend テストの設定についてはすでに多くの質問があることは承知していますが、何時間もの調査の結果、どれも私の問題を解決できませんでした。だからここに私のコードがあります:
ブートストラップのテスト:
<?php
error_reporting(E_ALL | E_STRICT);
defined('APPLICATION_PATH') || define('APPLICATION_PATH',realpath(dirname(__FILE__).'/../../application'));
define('APPLICATION_ENV', 'testing');
set_include_path(implode(PATH_SEPARATOR, array(realpath(APPLICATION_PATH.'/../library'), get_include_path())));
require_once ('Zend/Application.php');
require_once ('ControllerTestCase.php');
コントローラーのテストケース:
class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase {
public $application;
public function setUp() {
$this->bootstrap = array($this, 'appBootstrap');
parent::setUp();
}
public function appBootstrap() {
$this->application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH.'/configs/application.ini');
$this->application->bootstrap();
}
}
簡単なテスト:
class IndexControllerTest extends ControllerTestCase {
public function testDefaultShouldInvokeIndexAction()
{
$this->dispatch('/');
$this->assertModule('default');
$this->assertController('index');
$this->assertAction('index');
}
}
このテストを実行するたびに、PHPUnit は、IndexController で使用されているライブラリ内のクラスが見つからないという致命的なエラー メッセージをスローします。したがって、その理由はオートローダーに関連するものに違いないと思いました。デバッグ後、テストが通常の Bootstrap や Auth プラグインなどを介して実行され、私のライブラリが含まれていることがわかりました。したがって、PHPUnit の問題が何であるかはわかりません。ブラウザではすべて正常に動作し、コマンドラインでのコントローラ以外のテスト (グローバル設定など) も動作します。
コントローラーのテストを機能させるために何をする必要があるかについてのヒントをいただければ幸いです。
編集:私のディレクトリ構造は次のようになります(特定の理由でクラスを異なるライブラリに分けました)
project
- library1
- library2
- project_name
->application
->library3
->library4
->tests
->>application
->>>ControllerTestCase.php
->>>Bootstrap.php
->>Controller
->>>IndexControllerTest.php
私のインクルードパスは実際には次のようになります:
set_include_path(implode(PATH_SEPARATOR, array(realpath(APPLICATION_PATH.'/../library3'), get_include_path())));
set_include_path(implode(PATH_SEPARATOR, array(realpath(APPLICATION_PATH.'/../library4'), get_include_path())));
set_include_path(implode(PATH_SEPARATOR, array(realpath(APPLICATION_PATH.'/../../library1'), get_include_path())));
set_include_path(implode(PATH_SEPARATOR, array(realpath(APPLICATION_PATH.'/../../library2'), get_include_path())));