2011-05-05 139 views
0
 
class ControllerTest extends Zend_Test_PHPUnit_ControllerTestCase 
{ 
    public $object; 

    public function setUp() { 
     $this->bootstrap = array($this, 'boostrap'); 
     parent::setUp(); 
    } 

    public function bootstrap(){ 
     $this->application = new Zend_Application(
        APPLICATION_ENV, 
        APPLICATION_PATH . '/configs/application.ini' 
       ); 
     $this->application->bootstrap(); 

    } 

    public function testIndexAction(){ 
     // body 
    } 

} 

這是測試的類。我的問題是如何實現testIndexAction其中在命令提示符實際的命令是:PHPUnit配置測試

PHP zfrun.php -a ..index

+0

'zfrun.php'從哪裏來?你可以鏈接到它的來源或發佈它,如果它很短? Zend的ControllerTestCase被設計爲給定一個派發路徑,渲染視圖並對結果內容作出斷言。 – 2011-05-04 06:48:59

+0

zfrun.php來自測試,它也是應用程序的根。 zfrun.php就像一個引導文件。用於應用程序Bootstrap.php的實際引導程序還會實例化Zend_Console_Getopt,它也定義運行該應用程序的參數。 – Efox 2011-05-04 07:29:37

回答

0

沒有確切看到的zfrun.php沒有,我只能猜測,這聽起來像你需要溝ControllerTestCaseControllerTestCase旨在模仿通過Zend調度程序發送的HTTP請求,但您並不需要這樣做。

相反,你可以嘗試通過設置$ argv的,因爲它看起來和執行zfrun.php自己模仿調用命令行zfrun.php

function testIndexAction() { 
    $argv = array(
      '-a', 
      'module_name.controller_name.index', 
     ); 
    require 'zfrun.php'; 
} 

的問題是,這個工程的只有一個測試,假設zfrun.php定義了類或函數,並且不需要多次。因此,您需要在新的測試用例基類中執行zfrun.php所做的任何操作,而無需使用zfrun.php本身。基本上將其代碼重構爲可重用的測試幫助器方法。

function executeControllerAction($module, $controller, $action) { 
    ... whatever magic zfrun.php does ... 
} 
+0

我只是使用手動測試。我實際上需要處理PHPUnit測試的設置。 – Efox 2011-05-12 02:48:34

+0

PHPUnit支持您無疑發現的手動和自動測試。但是,您必須設置您的環境以允許PHPUnit訪問您的課程和/或環境。這是否回答您的問題或幫助您解決您遇到的問題? – 2011-05-12 04:59:11

0

如果這是你的主頁的測試,使用

$this->dispatch('/'); 

如果沒有,你得給它,這將觸發加載此控制器路由的URL。