有没有人有使用Yii2中的Codeception测试来测试需要JSON请求的API端点的经验?
现在,我只是希望对200响应代码和JSON主体进行基本检查。
目前,我的测试打破了“[PHPUnit_Framework_ExceptionWrapper]错误请求。”
编辑
事实证明,我自己的代码抛出了“错误请求”错误,因为$ request-> getRawBody()为空。也就是说,我在调用sendPOST()时设置的参数没有通过Yii请求对象。没有它们,请求注定要失败
/编辑
EDIT2
从测试中删除标题(根据评论),它可以工作
/ EDIT2
我正在尝试使用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>
我是否在早期阶段做错了什么?或者,我是以错误的方式接近这个?也许有更好的方法来发送像这样的JSON POST请求?