1

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

CException: CHttpRequest is unable to determine the request URI.

起初,我以为是因为它找不到模块。但是,如果我将 url 更改为错误的,我会得到一个正确的错误,表明它找不到视图。

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

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

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

4

2 回答 2

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”,它负责固定装置以及其他与测试相关的配置。

如果有人有更好的建议,请随时发表评论:)

亲切的问候

于 2013-09-04T19:47:45.547 回答
2

我认为这是因为您没有设置任何服务器变量,即$_SERVER您可能在控制器中执行以下操作:

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

因此,在您运行测试之前,请确保您也使用了服务器变量的夹具。我认为现在应该足够了:

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

但是,要运行功能测试,我建议您使用 SeleniumRC,然后您就不必执行这些变通办法,并且我认为也可以模拟用户点击。

阅读功能测试的初始指南,阅读selenium rc phpunit 指南,以及CWebTestCase 文档

注意:您可能仍然需要对某些变量使用固定装置,而且我在测试方面没有太多经验(这很糟糕),所以我不太确定我对硒的看法是否完全正确。

于 2012-06-21T03:03:19.520 回答