使用参数在Laravel模拟路线中进行单元测试中间件

时间:2019-01-22 11:21:20

标签: laravel unit-testing laravel-routing laravel-middleware

我正在开发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。因此,我需要使用参数占位符模拟路由,然后中间件将能够按名称获取路由参数值。我该如何伪造/模拟呢?有办法吗?

0 个答案:

没有答案