2012-06-13 3 views
1

Когда я пытаюсь выполнить функциональную UnitTest модуля в моем 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 конфигураций.

Если кто-то лучше предложения, не стесняйтесь комментировать :)

Сердечные приветы

Смежные вопросы