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

Php 如何使用JSON正文在Codeception FunctionalTest中执行POST请求,php,unit-testing,yii2,codeception,Php,Unit Testing,Yii2,Codeception,我正在使用Yii2的Codeception。我需要使用json内容体执行POST请求。我不想使用REST模块,因为我甚至还不能配置它。(说来话长…) 我已经能够写我的GET测试了。现在有了第一次后测试,我被卡住了 在功能测试中有一个$I->amOnPage([])方法,它只能执行GET请求 sendAjaxPost不允许使用POST发送内容正文 $I->sendPOST('api/xyz',“{\“xyz\”:1}”)也不起作用,因为Yii没有得到任何路由,所以加载了主页。该路径在调用堆栈中丢失

我正在使用Yii2的Codeception。我需要使用json内容体执行POST请求。我不想使用REST模块,因为我甚至还不能配置它。(说来话长…)

我已经能够写我的GET测试了。现在有了第一次后测试,我被卡住了

  • 在功能测试中有一个
    $I->amOnPage([])
    方法,它只能执行GET请求
  • sendAjaxPost
    不允许使用POST发送内容正文
  • $I->sendPOST('api/xyz',“{\“xyz\”:1}”)
    也不起作用,因为Yii没有得到任何路由,所以加载了主页。该路径在调用堆栈中丢失
  • 有一个
    InnerBrowser->\u loadPage
    方法,允许我以所有可配置的方式执行请求,但我找不到访问它的方法
  • 有没有办法从测试中访问
    InnerBrowser
    对象?
    我已经尝试了
    $I->getModule('PhpBrowser')->\u loadPage
    $this->getModule('Yii2')
    您可以使用它,它有一个数组参数和POST值随请求一起发送。

    您可以更新后端代码以接受原始输入和参数,这样您就可以通过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;
        }