2017-05-27 18 views
0

ユーザーがLaravel 5.4/PHPUnitでxロールを持っているかどうかを確認するミドルウェアをテストしようとしています。役割の機能は、ブラウザで正常に動作しますが、私は次のコードで(私は必要なロールなしで誰かと期待通り403年代取得)を渡すために私のテストを取得するように見えることはできません。Laravel 5.4 - 統合テストの役割ミドルウェアが失敗する

public function testSuperAdminRoleRoute() 
{ 
    $admin = factory(User::class)->create(); 
    $adminRole = \HttpOz\Roles\Models\Role::whereSlug('super.admin')->first(); 

    $admin->detachAllRoles(); 
    $admin->attachRole($adminRole); 

    $response = $this->actingAs($admin) 
        ->get('/super-admin-only') 
        ->assertStatus(200); 
} 

I dd($admin->roles) I確かに正しい役割を見ていますが、私はLaravel/PHPUnit内で何か制限があると思います。私は以前、受入れテストでこの種の機能をテストし、それを動作させました。

アドバイスはありがとうございます!

答えて

0

パッケージの著者(httoz)と話した後、我々はLaravelのbe()またはactingAs()メソッドの制限によるものだと考えています。私たちは本当に100%確信しているわけではありませんが、私はセッションが始まると信じており、PHPUnitはセッションストレージとして配列を使用しています。

$errorsが定義されていないので、私は$this->disableMiddleware()を使用しようとしましたが、私は私の意見で$error袋を使用します(そしてそれがミドルウェアを経由して設定されている)ので、私のテスト500。

しかし、Laravel 5.5でこの変更案読み:https://github.com/laravel/framework/pull/18673

を私はプッシュからのコードをコピー:

public function withoutMiddleware($middleware = null) 
{ 
    if (is_null($middleware)) { 
     $this->app->instance('middleware.disable', true); 
     return $this; 
    } 
    $nullMiddleware = new class { 
     public function handle($request, $next) 
     { 
      return $next($request); 
     } 
    }; 
    foreach ((array) $middleware as $abstract) { 
     $this->app->instance($abstract, $nullMiddleware); 
    } 
    return $this; 
} 

をし、設定したが、これに私の$this->withoutMiddleware()呼び出しを更新:

$this->withoutMiddleware([ 
    \HttpOz\Roles\Middleware\VerifyRole::class, 
    \HttpOz\Roles\Middleware\VerifyGroup::class 
]); 

私は再び緑になる!

関連する問題