代码之家  ›  专栏  ›  技术社区  ›  abr

Laravel,测试路由中间件返回true

  •  0
  • abr  · 技术社区  · 5 年前

    我一直在写一些测试来检查应用于某些路由的中间件。 我已经定义了Gate,以便将它们用作角色验证。

    我的路线定义如下:

    Route::get('/', 'UserController@index')->middleware(['can:Administrator'])->name('user.index');
    

    在我的路由服务提供商上,我定义这个路由文件也使用另一个中间件,称为 api .

    在我的单元测试中,我通过名称获取路由,并比较它应该应用的中间件,就像这样

    public function testMiddlewaresAssignedToUserIndex() {
      $expectedMiddlewares = ['api', 'can:Administrator'];
      $this->assertEquals($expectedMiddlewares, Route::getRoutes()->getByName('user.index')->gatherMiddleware());
    } 
    

    这正是我们想要的。但是,当需要应用多个条件(如“管理员或主管”)时,它将返回true。为了验证这些角色中的任何一个,路由被编写为:

    Route::get('/', 'UserController@index')->middleware(['can:Administrator' ||'can:Supervisor'])->name('user.index');
    

    现在发生的是,在测试中,它返回 ['api', true]

    还有什么方法或者如何测试路线的中间件?

    0 回复  |  直到 5 年前
    推荐文章