2012-06-13 43 views
1

當我想我的Yii代碼中執行模塊的功能單元測試,我不斷收到以下錯誤:的Yii - CHttpRequesterror而在模塊功能單元測試

CException: CHttpRequest is unable to determine the request URI. 

起初,我以爲這是因爲它找不到該模塊。但是,如果我將url更改爲錯誤的地址,我會得到一個正確的錯誤,說明它找不到視圖。

這是我的測試代碼看起來像

public function testViewControllerModule() 
{ 
    ob_start(); 
    Yii::app()->runController('module/controller/view'); 
} 

什麼我可能會丟失任何想法?

回答

1

我想這是因爲你沒有設置任何服務器變量,即$_SERVER,你可能會做這樣的事情在你的控制器:

Yii::app()->request .... 

所以你運行測試之前,請確保您使用夾具也爲server variables。我想這應該足夠了現在:

$_SERVER=array(
    'REQUEST_URI'=>'index.php', // the other fields should follow 
); 

但是運行功能測試,我會建議使用SeleniumRC,你會不會做這些變通辦法再和可以模擬用戶點擊另外,我覺得。

請閱讀最初的guide to Functional Testing,閱讀selenium rc phpunit guide以及CWebTestCase documentation

注意:您可能仍然需要使用燈具來測試某些變量,而且我沒有太多的測試經驗(這很糟糕),所以我不太確定我對硒是否完全正確。

+0

讓我知道這是如何工作的,我很想進一步幫助您。 –

+0

我完全偏離了答案嗎?讓我知道,這樣我可以刪除這個答案,或改進它。有些反饋比沒有反饋好.. –

+0

Woeps對不起,我完全失去了這篇文章的軌道...今晚會試試這個答案:-),提前致謝! – SnIpY

3

bool.devs迄今爲止的答案。

本博客文章解釋的異常原因相當不錯:
http://mattmccormick.ca/2012/09/14/unit-testing-url-routes-in-yii-framework/

就我而言,我概括瞭解決方案,並已在/www/protected/tests/bootstrap.php設置下面的變量:

... 

$_SERVER['SCRIPT_FILENAME'] = 'index-test.php'; 
$_SERVER['SCRIPT_NAME'] = '/index-test.php'; 
$_SERVER['REQUEST_URI'] = 'index-test.php'; 

Yii::createWebApplication($config); 

考慮使用「指數test.php的」而不是「的index.php」,因爲它包含了配置「test.php的」,這是負責燈具,也許其他測試relevated配置。

如果有人有更好的建議隨意評論:)

親切的問候