handle($request, function () { DB::select('select 1'); return response('ok', 200); }); expect($response->getStatusCode())->toBe(200); expect($response->headers->has('Server-Timing'))->toBeTrue(); $serverTiming = $response->headers->get('Server-Timing'); expect($serverTiming) ->toContain('app;desc="Total";dur=') ->toContain('db;desc="Database (') ->toContain('php;desc="PHP (excl. DB)";dur=') ->toContain('dbslow;desc="Slowest query";dur=') ->toContain('queries;desc="Query count";dur=') ->toContain('html;desc="Response bytes";dur=') ->toContain('mem;desc="Peak memory (MB)";dur='); expect($response->headers->has('X-Debug-Query-Count'))->toBeTrue(); expect((int) $response->headers->get('X-Debug-Query-Count'))->toBeGreaterThanOrEqual(1); expect($serverTiming)->toMatch('/queries;desc="Query count";dur=\d+/'); expect($response->headers->has('X-Debug-Memory-MB'))->toBeTrue(); expect((float) $response->headers->get('X-Debug-Memory-MB'))->toBeGreaterThan(0); expect($response->headers->has('X-Debug-Html-Bytes'))->toBeTrue(); expect((int) $response->headers->get('X-Debug-Html-Bytes'))->toBeGreaterThan(0); expect($serverTiming)->toMatch('/html;desc="Response bytes";dur=\d+/'); }); test('injects on-screen HUD into full HTML documents when server_timing is enabled', function () { Config::set('app.server_timing', true); $middleware = new AddServerTimingHeaders; $request = Request::create('/projects', 'GET'); $response = $middleware->handle($request, function () { DB::select('select 1'); return response('