diff --git a/src/Debugger/Debugger.php b/src/Debugger/Debugger.php index bdd0adc6..a42db167 100644 --- a/src/Debugger/Debugger.php +++ b/src/Debugger/Debugger.php @@ -166,16 +166,33 @@ public function render(): string */ protected function createTab(string $type): void { - if (!$this->debugBar->hasCollector($type)) { - $this->debugBar->addCollector(new MessagesCollector($type)); - } + $collector = $this->resolveMessagesCollector($type); $messages = $this->store->get($type); foreach ($messages as $message) { $fn = key($message); - $this->debugBar[$type]->$fn($message[$fn]); + $collector->log($fn, $message[$fn]); + } + } + + /** + * Ensures the requested debug tab collector can accept mixed message payloads. + * @throws DebugBarException + */ + protected function resolveMessagesCollector(string $type): MessagesCollector + { + if (!$this->debugBar->hasCollector($type)) { + $this->debugBar->addCollector(new MessagesCollector($type)); } + + $collector = $this->debugBar->getCollector($type); + + if (!$collector instanceof MessagesCollector) { + throw new DebugBarException("Collector '{$type}' must be a MessagesCollector instance"); + } + + return $collector; } /** diff --git a/tests/Unit/Debugger/DebuggerTest.php b/tests/Unit/Debugger/DebuggerTest.php index ac7d0c3d..b73bcffe 100644 --- a/tests/Unit/Debugger/DebuggerTest.php +++ b/tests/Unit/Debugger/DebuggerTest.php @@ -108,7 +108,7 @@ public function testDebugbarRender(): void $this->debugger->initStore(); - $rendererMock = Mockery::mock('alias:' . JavascriptRenderer::class); + $rendererMock = Mockery::mock(JavascriptRenderer::class); $rendererMock->shouldReceive('setBaseUrl')->andReturnSelf(); $rendererMock->shouldReceive('addAssets')->andReturnSelf(); $rendererMock->shouldReceive('renderHead')->andReturn('
'); @@ -117,6 +117,9 @@ public function testDebugbarRender(): void $this->debugBarMock->shouldReceive('getJavascriptRenderer')->andReturn($rendererMock); $this->debugBarMock->shouldReceive('hasCollector')->with(Mockery::any())->andReturn(true); + $this->debugBarMock->shouldReceive('getCollector') + ->with(Mockery::any()) + ->andReturn(Mockery::mock(MessagesCollector::class)); $output = $this->debugger->render(); @@ -124,6 +127,33 @@ public function testDebugbarRender(): void $this->assertStringContainsString('