Yii - 模块中的功能单元测试时出现CHttpRequest错误

时间:2012-06-13 21:34:48

标签: php module yii

当我尝试在Yii代码中执行模块的功能单元测试时,我一直收到以下错误:

CException: CHttpRequest is unable to determine the request URI.

起初,我认为这是因为找不到模块。但是,如果我将url更改为错误的url,我会收到正确的错误,因为它无法找到该视图。

这就是我的测试代码的样子

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

关于我可能遗失的任何想法?

2 个答案:

答案 0 :(得分: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);

考虑使用' 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

注意:你可能仍然需要对一些变量使用灯具,而且我没有太多的测试经验(这很糟糕),所以我不太确定我对硒的完全正确。