protected function mockRouter($app = null)
{
$app = $app ?: $this->app;
$routerFacade = new \Illuminate\Support\Facades\Route();
$this->invokeMethod($routerFacade, 'createFreshMockInstance', ['router']);
$router = $routerFacade::getFacadeRoot()->makePartial();
$router->shouldReceive('substituteBindings')->with(m::type('\\Illuminate\\Routing\\Route'))->andReturnUsing(function ($route) use($router) {
foreach ($route->parameters() as $key => $value) {
if (isset($router->binders[$key])) {
$route->setParameter($key, $router->performBinding($key, $value, $route));
}
}
$routePartial = m::mock($route);
$routePartial->shouldReceive('signatureParameters')->andReturn([]);
$router->substituteImplicitBindings($routePartial);
return $routePartial;
});
$this->setProperty($router, 'events', $app['events']);
$this->setProperty($router, 'routes', new \Illuminate\Routing\RouteCollection());
$this->setProperty($router, 'container', $app);
return $router;
}