【问题标题】:CakePHP Unit Test Not Returning Content or ViewCakePHP 单元测试不返回内容或视图
【发布时间】:2013-10-30 12:55:25
【问题描述】:

我正在为我们的项目实施测试用例,以包含在我们的构建脚本中。此 CakePHP 2.4 应用程序主要基于 REST,并已设置为解析其 routes.php 文件中的 json 扩展。以下是我们应用程序中典型函数的示例:

public function index() {
    $this->paginate = array(
        'fields' => array('User.username', 'User.first_name', 'User.last_name', 'UserGroup.name','Location.name','User.id'),
        'conditions' => array(
            'active'=>1
        ),
        'link' => array('UserGroup','Location')
    );
    $this->set('response', $this->RestApi->getResponse());
    $this->set('_serialize','response');
}

这将返回一个像这样的 json 结构:

{"sEcho":1,"iTotalRecords":16,"iTotalDisplayRecords":14,"aaData":[["admin","Administrative"],["salesman","Salesman"]]}

因此,我希望在编写测试用例时调用此 URL 时会收到 JSON 响应,我的测试之一是正确解码并继续验证数据。问题是,对 testAction 的调用什么也不返回(我试过告诉它返回视图和内容)。我能够访问响应的唯一方法是查看返回变量。

示例 - 不工作:

$result = $this->testAction('/users/index.json',array(
    'method' => 'GET',
    'return' => 'contents'
));
var_dump($result); // NULL

示例 - 正在运行:

$result = $this->testAction('/users/index.json',array(
    'method' => 'GET',
    'return' => 'vars'
));

那么看 vars 有什么问题呢?好吧,它比应用程序如何工作的真实示例更进一步。如果我无法让基本单元测试按预期工作,这也让我有点担心架构。

请多多指教,感谢阅读!

编辑:我应该补充一点,即使对非休息 url 执行 testAction,例如只返回 HTML 的,我仍然没有得到响应。没有 HTML 等...

【问题讨论】:

    标签: unit-testing cakephp phpunit cakephp-2.0


    【解决方案1】:

    我最终解决了这个问题。有必要禁用 Auth 组件。有一些关于如何在测试本身中执行此操作的博客和讨论线程,但是在每次测试中都必须重复相同的代码似乎很乏味。我的解决方案是在测试运行时自动禁用 Auth 组件。

    在 AppController::beforeFilter:

    // For Mock Objects and Debug >= 2 allow all (this is for PHPUnit Tests)
    if(preg_match('/Mock_/',get_class($this)) && Configure::read('debug') >= 2){
        $this->Auth->allow();
    }
    

    我觉得这非常优雅,因为我们更关心部署中的核心功能。我们可能会返回并创建一个单元测试来验证 Auth / ACL 组件是否按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 2016-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多