/
githubmirror
/
framework
Обзор
Документация
Войти
/
githubmirror
/
framework
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
13.x
tests/Integration/Foundation/Exceptions/RendererTest.php
177 строк
6 KB
Jason McCreary
[13.x] Mockery cleanup (#61117)
10 авг 2026, 20:23
Не верифицирован
10 авг 2026, 20:23
2ee40ee
Код
Авторство
О чём код?
<?php namespace Illuminate\Tests\Integration\Foundation\Exceptions; use Illuminate\Contracts\Events\Dispatcher; use Illuminate\Contracts\Foundation\ExceptionRenderer; use Illuminate\Foundation\Exceptions\Renderer\Listener; use Illuminate\Foundation\Exceptions\Renderer\Renderer; use Illuminate\Foundation\Providers\FoundationServiceProvider; use Mockery; use Orchestra\Testbench\Attributes\WithConfig; use Orchestra\Testbench\TestCase; use RuntimeException; class RendererTest extends TestCase { protected function defineRoutes($router) { $router->get('failed', fn () => throw new RuntimeException('Bad route!')); $router->get('failed-with-previous', function () { throw new RuntimeException( 'First exception', previous: new RuntimeException( 'Second exception', previous: new RuntimeException( 'Third exception' ) ) ); }); } #[WithConfig('app.debug', true)] public function testItCanRenderExceptionPage() { $this->assertTrue($this->app->bound(Renderer::class)); $this->get('/failed') ->assertInternalServerError() ->assertSee('RuntimeException') ->assertSee('Bad route!'); } #[WithConfig('app.debug', false)] public function testItCanRenderExceptionPageUsingSymfonyIfRendererIsNotDefined() { config(['app.debug' => true]); $this->assertFalse($this->app->bound(Renderer::class)); $this->get('/failed') ->assertInternalServerError() ->assertSee('RuntimeException') ->assertSee('Bad route!'); } #[WithConfig('app.debug', true)] public function testItCanRenderExceptionPageWithRendererWhenDebugEnabled() { $this->app->singleton(ExceptionRenderer::class, function () { return new class() implements ExceptionRenderer { public function render($throwable) { return response('Custom Exception Renderer: '.$throwable->getMessage(), 500); } }; }); $this->assertTrue($this->app->bound(ExceptionRenderer::class)); $this->get('/failed') ->assertInternalServerError() ->assertSee('Custom Exception Renderer: Bad route!'); } #[WithConfig('app.debug', false)] public function testItDoesNotRenderExceptionPageWithRendererWhenDebugDisabled() { $this->app->singleton(ExceptionRenderer::class, function () { return new class() implements ExceptionRenderer { public function render($throwable) { return response('Custom Exception Renderer: '.$throwable->getMessage(), 500); } }; }); $this->assertTrue($this->app->bound(ExceptionRenderer::class)); $this->get('/failed') ->assertInternalServerError() ->assertDontSee('Custom Exception Renderer: Bad route!'); } #[WithConfig('app.debug', false)] public function testItDoesNotRegisterListenersWhenDebugDisabled() { $this->app->forgetInstance(ExceptionRenderer::class); $this->assertFalse($this->app->bound(ExceptionRenderer::class)); $listener = Mockery::mock(Listener::class); $listener->shouldReceive('registerListeners')->never(); $this->app->instance(Listener::class, $listener); $this->app->instance(Dispatcher::class, Mockery::mock(Dispatcher::class)); $provider = $this->app->getProvider(FoundationServiceProvider::class); $provider->boot(); } #[WithConfig('app.debug', true)] public function testItDoesNotRegisterListenersWhenRendererBound() { $this->app->singleton(ExceptionRenderer::class, function () { return new class() implements ExceptionRenderer { public function render($throwable) { return response('Custom Exception Renderer: '.$throwable->getMessage(), 500); } }; }); $this->assertTrue($this->app->bound(ExceptionRenderer::class)); $listener = Mockery::mock(Listener::class); $listener->shouldReceive('registerListeners')->never(); $this->app->instance(Listener::class, $listener); $this->app->instance(Dispatcher::class, Mockery::mock(Dispatcher::class)); $provider = $this->app->getProvider(FoundationServiceProvider::class); $provider->boot(); } #[WithConfig('app.debug', true)] public function testItRegistersListenersWhenRendererNotBound() { $this->app->forgetInstance(ExceptionRenderer::class); $this->assertFalse($this->app->bound(ExceptionRenderer::class)); $listener = Mockery::mock(Listener::class); $listener->expects('registerListeners'); $this->app->instance(Listener::class, $listener); $this->app->instance(Dispatcher::class, Mockery::mock(Dispatcher::class)); $provider = $this->app->getProvider(FoundationServiceProvider::class); $provider->boot(); } #[WithConfig('app.debug', true)] public function testItRendersPreviousExceptions() { $this->assertTrue($this->app->bound(Renderer::class)); $this->get('/failed-with-previous') ->assertInternalServerError() ->assertSeeInOrder([ 'RuntimeException', 'First exception', 'Previous exceptions', 'Second exception', 'Third exception', ]); } #[WithConfig('app.debug', true)] public function testItExcludesDecorativeAsciiArtInNonBrowserContexts() { $this->get('/failed') ->assertInternalServerError() ->assertSee('RuntimeException') ->assertSee('Bad route!') ->assertDontSee('viewBox="0 0 1268 308"', false); } }