Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 预期JSON POST的API终结点的Yi2 Codeception测试_Php_Yii2_Codeception - Fatal编程技术网

Php 预期JSON POST的API终结点的Yi2 Codeception测试

Php 预期JSON POST的API终结点的Yi2 Codeception测试,php,yii2,codeception,Php,Yii2,Codeception,有没有人有在Yi2中使用Codeception测试来测试需要JSON请求的API端点的经验 现在,我只希望对200响应代码和JSON主体进行基本检查 目前,我的测试因“[PHPUnit\u Framework\u ExceptionWrapper]错误请求”而中断 编辑 原来这个“错误请求”错误是由我自己的代码引发的,因为$request->getRawBody()是空的。也就是说,我在sendPOST()调用中设置的参数没有进入Yii请求对象。如果他们不在场,请求注定会失败。 /编辑 编辑2

有没有人有在Yi2中使用Codeception测试来测试需要JSON请求的API端点的经验

现在,我只希望对200响应代码和JSON主体进行基本检查

目前,我的测试因“[PHPUnit\u Framework\u ExceptionWrapper]错误请求”而中断

编辑
原来这个“错误请求”错误是由我自己的代码引发的,因为$request->getRawBody()是空的。也就是说,我在sendPOST()调用中设置的参数没有进入Yii请求对象。如果他们不在场,请求注定会失败。
/编辑

编辑2
从测试中删除标题(根据注释),它就会工作。
/编辑2

我正在尝试使用Codeception REST模块的sendPOST()方法

我不确定Codeception\Lib\Connector\Yii2.php是否正确地将我的参数数据从BrowserKit请求映射到相应的Yii请求。也就是说,进入doRequest()的请求有我的数据,但同一函数中稍后的$app->getRequest()缺少数据

这是我的测试:

$I = new FunctionalTester($scenario);
$I->haveHttpHeader('Content-Type', 'application/json'); //remove
$I->haveHttpHeader('Accept', 'application/json'); //remove
$I->sendPost(
    '/index-test.php/api/v1/poi/bbox',
    [
        'bbox' => [
            'minLat' => 51.53667954545721,
            'minLng' => -0.14273375272750854,
            'maxLat' => 51.53749870786214,
            'maxLng' => -0.13856828212738037
        ]
    ]
);
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
下面是一个工作请求的CURL表示:

curl \
--request POST \
--header "Accept: application/json" \
--header "Content-Type: application/json; charset=UTF-8" \
--data '{ "bbox": {"minLng": -0.152573, "minLat": 51.529012, "maxLng": -0.124691, "maxLat": 51.54104} }' \
<endpoint>
curl\
--请帖\
--标题“接受:应用程序/json”\
--标题“内容类型:application/json;字符集=UTF-8”\
--数据{“bbox”:{“minLng”:-0.152573,“minLat”:51.529012,“maxLng”:-0.124691,“maxLat”:51.54104}\

我在早期有没有做错什么?或者,我是不是走错了路?也许有更好的方法发送这样的JSON POST请求?

您是否尝试过使用
--debug
标志运行
codecept run functional
?这将显示发送的内容和标题。我认为您使用REST模块进行CodeCeption是理所当然的。谢谢您的建议。我正在使用debug标志进行codecept-它向我显示了“[PHPUnit_Framework_ExceptionWrapper]错误请求”。我有一些与此相关的附加信息,我将在我的原始帖子中添加这些信息。