2012-06-01 85 views
2

我想寫一些測試用例,我正在寫一個ZF應用程序,但我似乎無法通過這一點。Zend自動加載模型在PHPUnit

我已經擴展了Zend_Test_PHPUnit_ControllerTestCase,增加以下內容:

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

它的工作原理,以及它初始化了Zend自動加載磁帶機,讓我加載我的圖書館以及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自動加載機註冊的自動加載磁帶機:

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

它顯示我的所有模塊,以及其命名空間視圖,控制器,模型等我做了同樣的通過我的瀏覽器垃圾箱匹配。

+0

缺少自動加載磁帶機的配置?一些自定義spl自動加載器?找出哪個自動加載器加載了App_Model_User類。 – MonkeyMonkey

回答

1

Zend的自動裝彈機需要APP_添加爲自動加載前綴這是你期望的那樣,像這樣的工作:

$autoloader = Zend_Loader_Autoloader::getInstance(); 
$autoloader->registerNamespace("App_"); 
+0

我會試試這個。謝謝。 –

+0

沒有快樂。似乎沒有效果。 –

+1

這解決了困擾我一天中很大一部分的問題:謝謝!我遇到的部分問題是許多與ZF(1)和PHPUnit有關的教程至少有4年的歷史,並且早於Zend_Loader_Autoloader的更新版本。您的解決方案適用於ZF 1.12.3。 –