2012-06-13 44 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配置。

如果有人有更好的建议随意评论:)

亲切的问候