我一直在写一些测试来检查应用于某些路由的中间件。
我已经定义了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]
还有什么方法或者如何测试路线的中间件?