Cakephp testAction()没有向控制器发送json有效负载

时间:2012-07-26 10:33:33

标签: cakephp testing

我正在尝试测试接受json有效负载的控制器函数。

根据testAction()的文档,这可以通过将$ options ['data']设置为适当的字符串来完成。它不适合我。 请参阅此处引用的文档:http://api20.cakephp.org/class/controller-test-case(请向下滚动testAction()部分。)

这是我的测试用例。

public function testCreate(){
    //Some code here
    $this->testAction('/shippingbatches/create', array('data' => '[3,6]', 'method' => 'post'));
    //Some more code here
}

这是我的控制器功能

public function create(){        
    debug($this->request); //This debug shows me an empty array in $this->request->data
    ob_flush();
    $order_ids = json_decode($this->request->data);
    //Some more code here
}

控制器功能的第一行显示$ this-> request->数据中的空数组。如果从testAction()传递的'data'是一个实际的数组,它就会很好用。精细。但是当它被设置为字符串时(不像文档中所述)。

以下是调试的输出。

object(Mock_CakeRequest_ef4431a5) {
    params => array(
        'plugin' => null,
        'controller' => 'shippingbatches',
        'action' => 'create',
        'named' => array(),
        'pass' => array(),
        'return' => (int) 1,
        'bare' => (int) 1,
        'requested' => (int) 1
    )
    data => array()
    query => array(
        'case' => 'Controller\ShippingBatchesController'
    )
    url => 'shippingbatches/create'
    base => ''
    webroot => '/'
    here => '/shippingbatches/create'
}

请帮忙。

Gurpreet

1 个答案:

答案 0 :(得分:0)

传递此类数据时,您必须使用CakeRequest::input()收到它。

public function create() {
    $json = $this->request->input('json_decode', true);  
    debug($json);
}

我应该注意到,我通过阅读Cake的ControllerTestCase::testAction测试用例来发现这一点。阅读测试用例可以让您深入了解Cake的内部工作方式,并为您提供编写测试的提示。