如何做php单元测试发布数据从javascript传递到控制器?

时间:2016-09-28 20:59:34

标签: php phpunit phalcon

我正在使用phalcon框架,我想编写一个单元测试。

在JS中,我正在使用Post Method和我的控制器

public function controllerAction {
    $this->view->disable();
    $body = $this->request->getRawBody();

    $data = json_decode($body, true);
    $status = array('success'=>true);

    if (!$data) {
        throw new \Exception("Invalid JSON Body");
    }} 

我需要一个测试功能来将后期数据传递给控制器 感谢

1 个答案:

答案 0 :(得分:0)

加载 REST 模块,Codeception单元测试的示例:

modules:
    enabled:
        - Asserts
        - Db
        - \Helper\Unit
        - \Helper\Database
        - Phalcon:
            bootstrap: ../app/config/bootstrap.php
            cleanup: true
            savepoints: true
        - REST:
            depends: Phalcon

然后在您的测试方法中,使用模拟数据向控制器发送帖子并检查响应:

public function  someTest(\UnitTester $I) {
    $I->sendPOST('/url_to_method', file_get_contents(codecept_data_dir() . 'testData.json'));

    $I->seeResponseContainsJson([
        "success" => "true"
    ]);

}

你的控制器方法应该略有不同,你需要调用 getJsonRawBody 而不是getRawBody,并在成功时返回实际的 $ success

public function controllerAction {
    $this->view->disable();
    $body = $this->request->getJsonRawBody();

    $data = json_decode($body, true);
    $status = array('success'=>true);

    if (!$data) {
        throw new \Exception("Invalid JSON Body");
    }
    else{
        $this->response->setContent(json_encode($status));
        return $this->response;
    }
}