Laravel 单元测试:如何模拟在Lumen中具有路由参数的请求

Laravel 单元测试:如何模拟在Lumen中具有路由参数的请求,laravel,api,phpunit,lumen,Laravel,Api,Phpunit,Lumen,我用Lumen创建了一个API,现在我还要创建测试方法。好吧,我知道在TDD中可能是相反的方式 我的API有一个带有注入请求对象的init(Request$Request)方法。当然,为了测试工作,我必须创建一个模拟请求。我是这样做的: $req = new Request([], [], ['param' => 'foo']); 看起来不错,但请求对象已初始化为空对象。在此之后,我尝试检查route参数: dd($req->route('param')); 但它产生空值;我花了

我用Lumen创建了一个API,现在我还要创建测试方法。好吧,我知道在TDD中可能是相反的方式

我的API有一个带有注入请求对象的
init(Request$Request)
方法。当然,为了测试工作,我必须创建一个模拟请求。我是这样做的:

$req = new Request([], [], ['param' => 'foo']);
看起来不错,但请求对象已初始化为空对象。在此之后,我尝试检查route参数:

dd($req->route('param'));
但它产生空值;我花了几个小时去寻找答案,在谷歌上搜索,但什么也没找到


有什么想法吗?

问题是
\illumb\Http\Request
中的第三个参数不是您应该传递路由参数的位置。如果你看看这个类,你会发现第三个参数是自定义属性(我不知道它到底是什么)

要模拟请求,可以使用方法
create
from
\illighted\Http\request

例如,路由是
route::post('/users/{user}','UsersController@store)

$request=request::create('/users/1','POST'[
'name'=>'john doe',
]);
dd($request->route('user'));//1.
详情如下:

/**
*根据给定的URI和配置创建请求。
*
*URI中包含的信息始终优先
*超过其他信息(服务器和参数)。
*
*@param string$uri该uri
*@param string$method HTTP方法
*@param array$parameters查询(GET)或请求(POST)参数
*@param array$cookies请求cookies($\u COOKIE)
*@param array$文件请求文件($\u文件)
*@param array$server服务器参数($\u服务器)
*@param string | resource | null$内容原始正文数据
*
*@返回静态
*/
公共静态函数create($uri,$method='GET',$parameters=[],$cookies=[],$files=[],$server=[],$content=null)
{
....
}

谢谢您。现在我有了一个类似的路由:
route::get('/{source}/{path:.*}',['uses'=>'MyController@index']);有了这个,我可以得到“源”中的第一个url段和“路径”路由参数中的另一个url段。这些参数是我的$request对象现在缺少的。@szatt1489顺便说一句,我从未见过这样的路由
/{path:.*}
。你确定它有效吗?请用你的实际问题更新你的问题!!我们只是回答你的问题。