当我尝试在Yii代码中执行模块的功能单元测试时,我一直收到以下错误:
CException: CHttpRequest is unable to determine the request URI.
起初,我认为这是因为找不到模块。但是,如果我将url更改为错误的url,我会收到正确的错误,因为它无法找到该视图。
这就是我的测试代码的样子
public function testViewControllerModule()
{
ob_start();
Yii::app()->runController('module/controller/view');
}
关于我可能遗失的任何想法?
答案 0 :(得分:3)
这篇博文很好地解释了异常的起源:
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);
考虑使用' index-test.php'而不是' index.php' ,因为它包含配置' test.php'它负责固定装置和其他测试相关的配置。
如果有人有更好的建议,请随时评论:)
亲切的问候
答案 1 :(得分: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。
注意:你可能仍然需要对一些变量使用灯具,而且我没有太多的测试经验(这很糟糕),所以我不太确定我对硒的完全正确。