需要在 $this->request->data 对象中设置数据值以进行测试

Posted

技术标签:

【中文标题】需要在 $this->request->data 对象中设置数据值以进行测试【英文标题】:Need to set up data values in $this->request->data object for testing purpose 【发布时间】:2019-06-22 19:55:15 【问题描述】:

我正在使用 CakePHP 2.X 并且需要使用 $this->request->data->object (or a Mock) 来测试 Controller 方法。我在控制器中有一个条件来验证是否$this->request->data is empty (if (empty($this->request->data)) EXECUTE SOMETHING) 并且我需要在测试端的这个对象中添加数据,而不是进入 if 语句。

我已经在网上寻找,但没有找到任何适合我的东西。这是控制器代码:

function default($user = null) 
$subsite = $this->Session->read('subsite');
        if ($subsite == "www" || $subsite == "xxx") 
            $this->redirect("/application/addtool");
            return "ok1";
        
        if (empty($this->request->data)) 
            $this->render();
         else 
            $this->request->data['Project']['actif'] = true;
            $user_id = $this->Session->read('user_id');
            $this->request->data['Project']['user_id'] = $user_id;
        

【问题讨论】:

【参考方案1】:

要在测试中传递数据,您需要在 testAction 的第二个参数中提供 data 键中的数据数组:

$this->testAction('/default', [
    'data' => [
        'some' => 'data',
    ],
    'method' => 'post',
]);

这将在请求数据中构造一个带有['some' => 'data'] 的测试请求。

欲了解更多信息:https://book.cakephp.org/2.0/en/development/testing.html#testing-controllers

【讨论】:

感谢您的回复。这些数据会是 $this->request->data 对象中可用的数据吗? 是的,testAction 将构建一个包含该数据作为数据的请求,该请求最终将在 $this->request->data 太棒了!为了未来的用户,您能否将答案标记为已接受?哦,欢迎来到 ***!

以上是关于需要在 $this->request->data 对象中设置数据值以进行测试的主要内容,如果未能解决你的问题,请参考以下文章

在tp5框架中$this->request->get('id', 100);是啥功能?

如何从 Cakephp4 中的 Helper 获取 $this->request->getAttribute('csrfToken')?

Opencart 3.x 缓存控制与 $this->request->get

我需要首先显示最新条目[关闭]

selectpage + echarts结合使用

在 Cakephp 中添加用户