簡體   English   中英

Laravel 5.4-集成測試角色中間件失敗

[英]Laravel 5.4 - integration testing role middleware fails

我正在嘗試測試一些中間件,以檢查用戶是否具有Laravel 5.4 / PHPUnit的x角色。 角色功能在瀏覽器中可以正常工作,但是我似乎無法通過以下代碼通過我的測試(與沒有所需角色的人一樣,我得到了預期的403):

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);
}

當我dd($admin->roles)我確實看到了正確的角色,但是我認為我在Laravel / PHPUnit中缺少某些限制。 我以前已經在驗收測試中測試過這種功能,並且可以正常工作。

任何建議深表感謝!

與軟件包作者( httoz )交談后,我們認為這是由於Laravel的be()actingAs()方法的局限性所致。 我們不是真的100%知道為什么,但是我相信會話會起作用,PHPUnit使用數組作為會話存儲,因此我朝着這個方向努力。

我嘗試使用$this->disableMiddleware() ,但是因為我在視圖中使用了$error包(並且是通過中間件設置的),所以我的測試500是因為未定義$errors

但是,請在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
]);

我又變綠了!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM