Laravel 5 临时禁用/绕过中间件

Laravel 5 临时禁用/绕过中间件,laravel-5,laravel-routing,laravel-middleware,Laravel 5,Laravel Routing,Laravel Middleware,在我的应用程序中,我实现了一个OAuth2服务器()和一个自定义身份验证包() 在my routes.php中: Route::group(['before' => 'oauth'], function() { // ... some routes here } 因此,请求必须提供授权标头,否则应用程序将使用OAutheException退出 现在我想测试我的控制器。因此,我必须为我的数据库添加OAuth会话和每个测试的访问令牌。 然后覆盖TestCase的call()-方法,并

在我的应用程序中,我实现了一个OAuth2服务器()和一个自定义身份验证包()

在my routes.php中:

Route::group(['before' => 'oauth'], function()
{
    // ... some routes here
}
因此,请求必须提供授权标头,否则应用程序将使用OAutheException退出

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

有没有办法禁用或绕过中间件(在我的例子中,只是为了单元测试)


在Laravel4中,它们被称为路由过滤器,并且在测试环境中被禁用。您还可以使用
Route::enableFilters()

手动启用/禁用它们。我能想到的唯一答案是在实际的中间件本身中设置一个旁路。例如:

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
}

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

这是我在遇到同样问题后开发的一个软件包


显然,随着昨天Laravel 5.1的发布,一个
disableMiddleware()
方法被添加到
TestCase
类中,它现在正是我想要的


问题已解决。:)

我也想知道这个问题的答案,到目前为止,我的理解是,不可能像在Laravel 4的测试模式中禁用路由过滤器那样禁用Laravel 5中的中间件。然而,我渴望被证明是错误的,所以只需在没有中间件的情况下使用
use在您的测试用例类中,这方面的改进已合并到允许禁用特定中间件集的框架中。看见