【问题标题】:Yii - CHttpRequesterror while functional unittesting in moduleYii - 模块中的功能单元测试时出现 Http 请求错误
【发布时间】:2013-09-05 03:47:45
【问题描述】:

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

CException: CHttpRequest is unable to determine the request URI.

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

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

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

关于我可能缺少什么的任何想法?

【问题讨论】:

    标签: php module yii


    【解决方案1】:

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

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

    亲切的问候

    【讨论】:

      【解决方案2】:

      我认为这是因为你没有设置任何服务器变量,即$_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

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

      【讨论】:

      • 让我知道这是怎么回事,我很乐意为您提供进一步的帮助。
      • 我是否完全偏离了答案?让我知道,这样我可以删除这个答案,或者改进它。有反馈总比没有反馈好..
      • 抱歉,我完全忘记了这篇文章...今晚会尝试这个答案:-),提前谢谢!
      猜你喜欢
      • 2018-08-13
      • 2013-03-05
      • 2014-05-10
      • 1970-01-01
      • 2018-06-03
      • 2021-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多