暂时禁用/绕过中间件

时间:2015-03-31 11:31:22

标签: laravel-5 laravel-routing laravel-middleware

在我的应用程序中,我将OAuth2-Server(oauth2-server-laravel)与自定义身份验证包(Sentinel by Cartalyst)结合使用。

在我的routes.php中:

Route::group(['before' => 'oauth'], function()
{
    // ... some routes here
}

因此请求必须提供授权标头,否则应用程序将退出OAuthException。

现在我想对我的控制器进行单元测试。因此,我必须为每个测试使用OAuth会话和访问令牌为我的数据库建立种子。 然后覆盖call() - TestCase的方法,并使用承载令牌设置HTTP授权标头。

有没有办法禁用或绕过中间件(在我的情况下仅用于单元测试)?

在Laravel 4中,它们被称为路由过滤器,无论如何它们在测试环境中被禁用。您也可以使用Route::enableFilters()手动启用/禁用它们。

3 个答案:

答案 0 :(得分:6)

显然,昨天发布了Laravel 5.1,disableMiddleware()类已经添加了TestCase方法,现在正是我想要的。

问题解决了。 :)

答案 1 :(得分:2)

我能想到的唯一答案是在实际的中间件本身中设置旁路。例如:

public function handle($request, Closure $next)
{
    // Don't validate authentication when testing.
    if (env('APP_ENV') === 'testing') {
        return $next($request);
    }
    // ... continue on to process the request
}

我不喜欢让中间件依赖于应用环境的想法,但我看不到任何其他选择。

答案 2 :(得分:0)

这是我在遇到同样问题后所做的一揽子计划。

https://github.com/moon0326/FakeMiddleware