我正在尝试测试一个接受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-> data中的空数组。如果从testAction()传递的“数据”是一个实际的数组,它将很好。但是,如果将其设置为字符串,则不会(与文档中的说明不同)。
这是调试的输出。
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'
}
请帮忙。
古尔佩雷特
最佳答案
当传递这样的数据时,必须使用CakeRequest::input()
接收它。
public function create() {
$json = $this->request->input('json_decode', true);
debug($json);
}
我应该注意到,通过阅读Cake的
ControllerTestCase::testAction
测试用例发现了这一点。阅读测试用例可以使您深入了解Cake的内部工作原理,并为您提供编写测试的提示。