繁体   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