如何进行php单元测试,将数据从javascript传递到控制器?

如何进行php单元测试,将数据从javascript传递到控制器?,php,phpunit,phalcon,Php,Phpunit,Phalcon,我正在使用phalcon框架,我想写一个单元测试 在JS中,我使用Post方法和我的控制器 public function controllerAction { $this->view->disable(); $body = $this->request->getRawBody(); $data = json_decode($body, true); $status = array('success'=>true); if

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

在JS中,我使用Post方法和我的控制器

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");
    }} 
我需要一个测试函数来将post数据传递给控制器
感谢加载REST模块,Codeception单元测试示例:

modules:
    enabled:
        - Asserts
        - Db
        - \Helper\Unit
        - \Helper\Database
        - Phalcon:
            bootstrap: ../app/config/bootstrap.php
            cleanup: true
            savepoints: true
        - REST:
            depends: Phalcon
然后在测试方法中,使用模拟数据向控制器发送post,并检查响应:

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;
    }
}

这不是一个单元测试,但基本上我要说的是您的控制器操作,请求数据类应该自己进行单元测试,这意味着在这里对这种基本功能进行测试是没有意义的。如果您使用的是预构建的MVC框架,那么他们可能已经构建并测试了这些功能的单元测试。您可以共享testcase类吗?你做了什么尝试?你应该考虑通过DI注入(模仿)你自己的请求