2011-03-02 136 views

回答

4

根據您的ajax響應如何生成,這可能很容易或更困難。如果使用控制器生成響應,則可以在單元測試中簡單調用相應的函數,並檢查返回的HTML/XML。例如,如果響應由控制器對象像這樣的調用函數生成:

$htmlResponse = $controller->buildPage($_REQUEST); 

然後就可以進行單元測試這樣的迴應:

$expected = "<html>whatever html you expect</html>"; 
$test_request = array(...); // parameters to test 
$actual = $controller->buildPage($test_request); 

$this->assertEquals($expected, $actual); 

如果不與你產生響應這樣的函數調用 - 如果你的AJAX請求是與它的一些動態內容的實際頁面,好像你可以做這樣的事情:

$_POST['parameter1'] = "test value"; // stuff whichever request object you're using 
             // with the values you need 
ob_start(); 
include('ajax_page.php'); 
$actual = ob_get_clean(); 
$expected = "<html>expected html as above</html>"; 

$this->assertEquals($expected, $actual); 

的PHPUnit還提供assertTag用於測試生成的HTML和XML的斷言包含您期望的標記 - 它可能有點挑剔,但它比響應和比較字符串更強大。最終,所有你想知道的是,給定一個輸入(請求參數),你得到你期望的輸出(返回的HTML或XML)。這是一個AJAX調用的事實並沒有從根本上改變方程式。如果你想測試AJAX請求是否正確MADE,你會想在JS測試的客戶端做到這一點。

+0

這很好用!但是,如果在單個單元測試會話中運行多個測試,即使使用setUp/tearDown,也可能必須將任何'function'和'class'定義提取到一個單獨的PHP文件中,然後使用'require_once ()'。同時關注如何使用'globals';如果你正在使用一個將'include()'放入一個函數的單元測試框架。在這種情況下使用'globals'可能會非常棘手,所以請避免使用它們。 – 2012-01-30 23:41:20