shouldReceive('callAction'); // Method needed by ViewController // Make it pass the ViewController check $controller->shouldReceive('__destruct'); // Just to make it mockable $route = Mockery::mock(Route::class); // Set up route call chain properly $route->shouldReceive('getController') ->andReturn($controller); $route->shouldReceive('getActionMethod') ->andReturn('index'); $route->shouldReceive('parameters') ->andReturn(['layout_data' => $layoutData]); $request = Request::create('/', 'GET'); $request->setRouteResolver(fn() => $route); $applyLayout->shouldReceive('execute') ->with($layoutData, ['layout_data' => $layoutData]); $next = fn($req) => new Response(); $response = $middleware->handle($request, $next); expect($response)->toBeInstanceOf(Response::class); });