【问题标题】:Need to set up data values in $this->request->data object for testing purpose需要在 $this->request->data 对象中设置数据值以进行测试
【发布时间】: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;
        }
}

【问题讨论】:

    标签: php cakephp phpunit


    【解决方案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
    • 太棒了!为了未来的用户,您能否将答案标记为已接受?哦,欢迎来到 StackOverflow!
    猜你喜欢
    • 2022-12-18
    • 2012-05-20
    • 2013-06-14
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多