通过 PHPUnit 测试调用 CrawlerTrait::call() 来测试 API 端点时。
$this->call(
'GET',
'api/v3/user?page[size]=20'
);
或者
$this->call(
'GET',
'api/v3/user,
[ 'page' => [ 'size' => 20 ] ]
);
有一条路线:
$app->group(['prefix'=>'api/v3','namespace'=>'MyAPI\V3core\Http\Controllers'], function ($app) {
/* User */
$app->get('user', ['as' => 'user.read', 'uses' => 'UserController@read');
});
使用控制器:
public function read(Request $request, $id = false)
{
dd($request);
}
传递给控制器的$request的内容有一个空的 $request->request->parameters:
+request: Symfony\Component\HttpFoundation\ParameterBag {
#parameters: []
}
而当我通过浏览器、邮递员甚至 wget 请求相同的 API 端点时,请求对象将返回一个填充的$request->request->parameters。
+request: ParameterBag {
#parameters: array:1 [
"page" => array:1 [
"size" => "20"
]
]
}
这会导致分页或任何查询驱动的功能无法测试,因为它可以在浏览器中工作,但不能通过 CrawlerTrait::call();
值得一提的是,使用 CrawlerTrait::call() 时返回的 Response 设置了查询属性而不是参数属性。
+query: Symfony\Component\HttpFoundation\ParameterBag {
#parameters: array:1 [
"page" => array:1 [
"size" => 20
]
]
}