2013-03-02 78 views
0

我打電話Zend框架PHPUnit的適當的方式來引導

$this->application->bootstrap()->run(); 

從我的測試設置功能裏,並沒有輸出。你應該在測試環境中撥打run()嗎?

我的測試工作,但前端控制器插件從未執行(這是我的應用程序所必需的)。將->run()放入執行插件,但phpunit停止並且沒有輸出。

我有工作測試,但我需要前端控制器插件在測試環境中執行。引導程序執行,但插件不執行。當他們通過->run()完成時,沒有輸出來

有什麼建議嗎?

編輯:添加setup()例如

require_once realpath(__DIR__.'/../../').'/TestBackendConfiguration.php'; 

abstract class Controllers_Backend_BaseControllerTest extends Zend_Test_PHPUnit_ControllerTestCase { 

    protected $config; 
    protected $application; 
    protected $users; 
    protected static $iterations = 0; 

    public function setUp() { 
     $this->bootstrap = array($this, 'appBootstrap'); 
     parent::setUp(); 
     $this->configureUsers(); 
     $this->configureACL($this->users); 
    } 

    public function appBootstrap() { 
     $this->config = new Zend_Config_Ini(CORE_PATH . '/configs/common.ini', APPLICATION_ENV, true); 
     $this->config->merge(new Zend_Config_Ini(CORE_PATH . '/configs/backend.ini', APPLICATION_ENV)); 
     $this->config->merge(new Zend_Config_Ini(CORE_PATH . '/configs/application.ini', APPLICATION_ENV)); 

     // Reset bootstraps 
     $this->config->bootstrap->path = CORE_PATH . '/backend/Bootstrap.php'; 
     $this->config->resources->frontController->controllerDirectory = CORE_PATH . '/backend/controllers'; 
     $this->config->resources->frontController->actionHelperPaths->Frontend_Controller_Action_Helper = CORE_PATH . '/backend/controllers/Action/Helper'; 
     $this->config->resources->frontController->baseUrl = "/admin"; 
     $this->config->resources->layout->layoutPath = CORE_PATH . '/backend/layouts/scripts'; 


     $this->application = new Zend_Application(APPLICATION_ENV, $this->config); 

     $this->application->bootstrap()->run(); 
    } 
} 

的原因調整到$this->config是因爲我有前端和後端相關的測試,他們需要不同的configs。他們有他們自己的Configuration.php腳本,這兩個腳本都聲明APPLICATION_PATH,因此哪個測試運行2nd無法重新定義此const並且應用程序不能正確引導。

現在,我主要關心的是我的插件沒有在測試環境中調度,這使我的應用程序有點因爲我有數據添加到註冊表,我需要訪問,顯然不存在。想法?

爲我的測試添加->run()調度插件但沒有輸出。我的後端控制器測試全部擴展了這個負責設置後端測試環境的類。

+0

不,你不應該需要調用運行()。你的測試類是否擴展了'Zend_Test_PHPUnit_ControllerTestCase'?你能發佈整個設置方法嗎? – 2013-03-02 11:52:54

+0

當然,是的,測試類擴展了Zend_Test_PHPUnit_ControllerTestCase。我有一個具有設置功能的基類,然後我個人的控制器測試正在擴展這個類。 – sudoyum 2013-03-02 15:33:21

回答

0

setup方法不應該實際引導應用程序,只需創建類以允許測試執行該操作。所以,我認爲,所有你需要做的就是刪除此行:

$this->application->bootstrap()->run(); 

爲了安全起見我還動parent::setUp();線在你的安裝方法,以便它在函數(結束叫你的兩個後配置方法)。如果這些方法依賴於那裏的引導程序,則將它們移至appBootstrap函數。

+0

好吧,插件現在正在工作,執行的順序是正確的(插件被稱爲)。謝謝你。 我現在面臨兩個問題...我的模型抱怨 Zend_Db_Table_Exception:沒有找到適配器 並且測試抱怨 Zend_Controller_Exception:此應用程序 這些是引導問題沒有定義默認模塊? – sudoyum 2013-03-04 14:51:10

0

我最近面臨類似的問題,終於找到了解決辦法。我希望這對某個人有用。

測試環境中資源的問題是引導程序對象在方法Zend_Application_Bootstrap_Bootstrap::run()中被指定爲FrontController參數,但在測試環境中永遠不會執行此方法。這是通過引導獲取任何資源時發生錯誤的原因(我假設您在代碼中使用Zend_Controller_Front::getInstance()->getParam('bootstrap'))。

,幫助我的是手動設置引導參數去FrontController在這樣的單元測試解決方法:

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(); 
    // set bootstrap param 
    $bootstrap = $this->application->getBootstrap(); 
    $front = $bootstrap->getResource('FrontController'); 
    $front->setParam('bootstrap', $bootstrap); 
}