我有一个客户端软件,它在每个请求的POST主体内发送数据。在我的CakaPHP应用程序中,我使用以下代码检查数据:
// StationController.php
if ($this->request->is('post')) {
$data = json_decode(file_get_contents('php://input'), TRUE);
...
}
现在的问题是,如何使用正确的正文内容编写模拟POST请求的测试用例?这是我当前的测试用例,它不能正常工作:
/**
* testPoints method
*
* @return void
*/
public function testPoints() {
$data = array(
'Station' => array('id' => '123'),
'points' => array(
array('id' => 1, 'sensor_id' => 1, 'value' => 25.43, 'sync' => 0, 'timestamp' => 1407063842),
array('id' => 2, 'sensor_id' => 2, 'value' => 52.5, 'sync' => 0, 'timestamp' => 1407063842),
array('id' => 3, 'sensor_id' => 3, 'value' => 934.566, 'sync' => 0, 'timestamp' => 1407063842),
array('id' => 4, 'sensor_id' => 4, 'value' => 867.2, 'sync' => 0, 'timestamp' => 1407063842),
array('id' => 5, 'sensor_id' => 1, 'value' => 25.93, 'sync' => 0, 'timestamp' => 1407064081),
array('id' => 6, 'sensor_id' => 2, 'value' => 53.5, 'sync' => 0, 'timestamp' => 1407064081),
array('id' => 7, 'sensor_id' => 3, 'value' => 935.566, 'sync' => 0, 'timestamp' => 1407064081),
array('id' => 8, 'sensor_id' => 4, 'value' => 665.57, 'sync' => 0, 'timestamp' => 1407064081)
)
);
$data = json_encode($data);
$result = $this->testAction(
'/stations/points/1',
array('data' => $data, 'method' => 'post')
);
debug($result);
}
如何修改testAction以添加一些POST数据?
答案 0 :(得分:0)
我用
$this->request->data = (array)$this->request->input('json_decode', true);
在这种情况下。 然后,您可以像平常一样使用request->数据。
专业提示:你也可以结合使用" application / x-www-form-urlencoded"一个和一个普通的帖子:
if (!$this->request->data) {
// Only then manually retrieve input
$this->request->data = (array)$this->request->input('json_decode', true);
}
这也意味着你可以简化测试并使用数组表示法为它们发布数据 - 因为在这里模拟php输入更加困难。