6

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

在我的 routes.php 中:

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

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

现在我想对我的控制器进行单元测试。所以我必须为我的数据库添加一个 OAuth 会话和每次测试的访问令牌。然后用 Bearer Token 覆盖call()-methodTestCase并设置 HTTP-Authorization Header。

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

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

4

3 回答 3

7

显然,随着昨天 Laravel 5.1 的发布,该类disableMiddleware()中添加了一个方法TestCase,现在它完全符合我的要求。

问题解决了。:)

于 2015-06-10T08:35:29.720 回答
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
}

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

于 2015-04-07T11:01:30.403 回答
0

这是我在遇到同样问题后处理的一个包。

https://github.com/moon0326/FakeMiddleware

于 2015-04-16T23:55:15.273 回答