Я занимаюсь разработкой приложения Laravel.Сейчас я занимаюсь модульным тестированием на Middleware.У меня проблема с имитацией маршрута.
Это мой класс промежуточного программного обеспечения
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());
}
Вышеуказанный метод теста работает нормально.Это работает, как ожидалось.Теперь я хочу издеваться над маршрутом.В промежуточном программном обеспечении я получаю параметр маршрута следующим образом.
$request->route('department');
Так что мне нужно смоделировать маршрут с параметром.Если я подшучивал так:
$path = "/department/{$department->id}";
Route::middleware('department.present')
->any($path, function () {
return 'OK';
});
Мое промежуточное ПО все еще не может получить идентификатор отдела, используя $ request-> route ('Department').Поэтому мне нужно смоделировать маршрут с заполнителем для параметра, и тогда промежуточное ПО сможет извлечь значение параметра маршрута по имени.Как я могу подделать / высмеять это?Есть ли способ сделать это?