【问题标题】:How to do POST request in Codeception FunctionalTest with JSON Body如何使用 JSON Body 在 Codeception FunctionalTest 中执行 POST 请求
【发布时间】:2019-06-21 09:41:03
【问题描述】:

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

我已经能够编写我的 GET 测试了。现在进行第一次 POST 测试,我卡住了。

  1. Functional Test 中有一个$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')

【问题讨论】:

    标签: php unit-testing yii2 codeception


    【解决方案1】:

    您可以使用I->SendAjaxPostRequest,它有一个数组参数,其中包含要与请求一起发送的 POST 值。

    【讨论】:

      【解决方案2】:

      您可以更新后端代码以接受原始输入和参数,因此您可以在 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;
          }
      

      【讨论】:

        猜你喜欢
        • 2021-04-10
        • 1970-01-01
        • 2015-11-06
        • 1970-01-01
        • 1970-01-01
        • 2021-04-28
        • 1970-01-01
        • 2019-06-15
        • 1970-01-01
        相关资源
        最近更新 更多