Промежуточное программное обеспечение модульного тестирования в Laravel mocking route с параметром - PullRequest
0 голосов
/ 22 января 2019

Я занимаюсь разработкой приложения 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').Поэтому мне нужно смоделировать маршрут с заполнителем для параметра, и тогда промежуточное ПО сможет извлечь значение параметра маршрута по имени.Как я могу подделать / высмеять это?Есть ли способ сделать это?

...