我用Lumen创建了一个API,现在我也将创建测试方法。好的,我知道在TDD中可能是相反的方式。
我的API有一个init(Request $request)
方法和一个注入的Request对象。为了测试其工作原理,我必须创建一个模拟请求。我是这样的:
$req = new Request([], [], ['param' => 'foo']);
看起来不错,但是Request对象已初始化为空对象。之后,我尝试检查路线参数:
dd($req->route('param'));
但是它产生空值;我花了几个小时找出答案并在Google上搜寻解决方案,但没有找到任何东西。
有什么主意吗?
答案 0 :(得分:0)
问题在于\Illuminate\Http\Request
中的第三个参数不是您应该传递路线参数的地方。如果您看一下该类,您会发现第三个参数是自定义属性(我不知道它到底是什么)。
要模拟请求,可以使用create
中的方法\Illuminate\Http\Request
。
例如路线为Route::post('/users/{user}', 'UsersController@store')
。
$request = Request::create('/users/1', 'POST', [
'name' => 'john doe',
]);
dd($request->route('user')); // 1
这是详细信息:
/**
* Creates a Request based on a given URI and configuration.
*
* The information contained in the URI always take precedence
* over the other information (server and parameters).
*
* @param string $uri The URI
* @param string $method The HTTP method
* @param array $parameters The query (GET) or request (POST) parameters
* @param array $cookies The request cookies ($_COOKIE)
* @param array $files The request files ($_FILES)
* @param array $server The server parameters ($_SERVER)
* @param string|resource|null $content The raw body data
*
* @return static
*/
public static function create($uri, $method = 'GET', $parameters = [], $cookies = [], $files = [], $server = [], $content = null)
{
....
}