我正在开发Laravel应用程序。我现在正在中间件上进行单元测试。我在模拟路线时遇到问题。
这是我的中间件类
class CheckIfDepartmentIdPresent
{
public function handle($request, Closure $next)
{
if (! $request->route()->hasParameter('department')) {
return abort(Response::HTTP_FORBIDDEN);
}
//check if the id is valid against the database,
//if it is valid then return $next($request)
return abort(Response::HTTP_FORBIDDEN);
}
}
我将中间件命名为department.present。
在单元测试中,我这样写我的第一个测试。
public function test_request_fail_if_id_parameter_is_missing_in_route()
{
Route::middleware('department.present')
->any('/department/test', function () {
return 'OK';
});
$response = $this->get('/department/test');
$this->assertEquals(Response::HTTP_FORBIDDEN, $response->getStatusCode());
}
上述测试方法工作正常。它按预期工作。现在我要模拟路线。在中间件中,我得到的是这样的route参数。
$request->route('department');
因此我需要使用参数模拟路由。如果我这样嘲笑。
$path = "/department/{$department->id}";
Route::middleware('department.present')
->any($path, function () {
return 'OK';
});
我的中间件仍然不能使用$ request-> route('department')来获取部门ID。因此,我需要使用参数占位符模拟路由,然后中间件将能够按名称获取路由参数值。我该如何伪造/模拟呢?有办法吗?