cakephp测试帖体

时间:2014-08-11 10:19:02

标签: php unit-testing cakephp

我有一个客户端软件,它在每个请求的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数据?

1 个答案:

答案 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输入更加困难。