6

私のアプリケーションでは、OAuth2-Server ( oauth2-server-laravel ) をカスタム認証パッケージ ( Sentinel by Cartalyst ) と組み合わせて実装しました。

私のroutes.phpでは:

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

そのため、リクエストは認証ヘッダーを提供する必要があります。そうしないと、アプリケーションは OAuthException で終了します。

今、私は自分のコントローラーをユニットテストしたいと思っています。そのため、テストごとに OAuth セッションとアクセス トークンをデータベースにシードする必要があります。call()次に、のメソッドを上書きしTestCase、HTTP-Authorization ヘッダーを Bearer Token で設定します。

ミドルウェアを無効化またはバイパスする方法はありますか (私の場合は単体テスト用です)?

Laravel 4 ではルート フィルターと呼ばれていましたが、いずれにせよテスト環境では無効にされていました。で手動で有効/無効にすることもできますRoute::enableFilters()

4

3 に答える 3

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 に答える