【发布时间】:2019-12-07 17:49:09
【问题描述】:
我的应用上有这个中间件,用于检查用户角色的路由:
public function handle($request, Closure $next, ...$roles)
{
if (in_array($request->user()->rol, $roles)) {
return $next($request);
} else {
return redirect()->action('SecurityController@noAutorizado');
}
}
我正在尝试对此中间件 (phpUnit) 进行测试:
public function testUsuarioLogadoPuedeAccederAPantallaUsuarios()
{
$user = UsuariosTestFixtures::unAsignador();
$this->actingAs($user);
$request = Request::create('/usuarios', 'GET');
$middleware = new CheckRole();
$response = $middleware->handle($request,Closure $next,$user->getRole(), function () {});
$this->assertEquals($response, true);
}
但是我正在检索这个错误:传递给 App\Http\Middleware\CheckRole::handle() 的参数 2 必须是 Closure 的一个实例,给定 null
我不知道如何通过 $middleware->handle 上的“Closure $next”
我试过这个:
public function testUsuarioLogadoPuedeAccederAPantallaUsuarios(Closure $next){...}
但它返回错误:函数 UsuarioControllerTest::testUsuarioLogadoPuedeAccederAPantallaUsuarios() 的参数太少,在 C:\www\APPS\catsa\vendor\phpunit\phpunit\src\Framework\TestCase.php 中传递了 0
解决办法是什么?
非常感谢!
【问题讨论】:
-
在第二个代码块中,你在哪里看到
$next? -
@Mike,什么?我不明白这个问题,对不起。
标签: testing laravel-5 phpunit middleware laravel-middleware