3

作成中の ZF アプリケーションのテスト ケースをいくつか作成しようとしていますが、この時点から先に進むことができないようです。

を拡張しZend_Test_PHPUnit_ControllerTestCase、以下を追加しました。

public function setUp() {
    $this->bootstrap = new Zend_Application('testing', 
        APPLICATION_PATH . '/configs/application.ini');
    parent::setUp();
}

これは機能し、Zend Autoloader を初期化して、Zend クラスだけでなくライブラリ内の他のクラスもロードできるようにします。だから私はテストをセットアップします:

public function testUserUnauthorized() {
    $this->dispatch('/api/user');
    //Assertions...
}

悲しいことに、テストがディスパッチを通過することはありません。代わりに、エラーが表示されます。

Fatal error: Class 'App_Model_User' not found in ....Action.php

Action.php は を拡張するクラスZend_Controller_Actionです。App_Model_Userその中には、ログインしたユーザーを認証するために使用する機能があります。require_onceオートローダーが機能するため、追加する必要はありませんでした。それは奇妙な部分です: それは私のブラウザーを介して動作します。PHPUnitにはありません。

そこで、Zend Autoloader に登録されている Autoloader をダンプしました。

public function testUserUnauthorized() {
    print_r(Zend_Loader_Autoloader::getInstance()->getAutoloaders());
    exit;
    $this->dispatch('/api/user');
}

すべてのモジュールと、ビュー、コントローラー、モデルなどの名前空間が表示されます。ブラウザーで同じことを行ったところ、ダンプが一致しました。

4

1 に答える 1

1

これが期待どおりに機能するには、Zend Autoloader に autoload プレフィックスとして App_ を追加する必要があります。たとえば、次のようになります。

$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->registerNamespace("App_");
于 2012-06-23T16:11:44.977 に答える