如何使用JSON正文在Codeception FunctionalTest中进行POST请求

时间:2019-06-21 09:41:03

标签: php unit-testing yii2 codeception

我在Yii2中使用Codeception。我需要对json内容主体执行POST请求。我不想使用REST模块,因为还没有能够配置它。 (那是一个更长的故事...)

我能够出色地编写GET测试。现在,我进行了第一次POST测试。

  1. 功能测试中有一个$I->amOnPage([])方法只能执行GET请求。
  2. sendAjaxPost不允许通过POST发送内容正文。
  3. $I->sendPOST('api/xyz',"{\"xyz\":1}")也不起作用,因为Yii没有获得任何路线,因此加载了主页。路径在调用堆栈中丢失了。
  4. 有一个InnerBrowser->_loadPage方法可以让我以所有可配置的方式进行请求,但我找不到访问它的方法。

是否可以通过测试访问InnerBrowser对象? 我已经尝试过$I->getModule('PhpBrowser')->_loadPage$this->getModule('Yii2')

2 个答案:

答案 0 :(得分:0)

您可以使用I->SendAjaxPostRequest,该参数带有一个带有POST值的数组参数,以与请求一起发送。

答案 1 :(得分:0)

您可以更新后端代码以接受原始输入和参数,因此您可以在 Codeception 测试中传递数组并在 api 中传递原始输入

    $data = json_decode(file_get_contents("php://input"));

    if(!$data) {
        $data = (object) Yii::$app->request->post ();
        $detail = (object) $data->detail;
    } else {
        $detail = $data->detail;
    }