mirror of
https://github.com/pestphp/pest.git
synced 2026-03-11 02:07:23 +01:00
feat: improves error handling
This commit is contained in:
@ -43,7 +43,7 @@ final class KernelDump
|
|||||||
@ob_clean(); // @phpstan-ignore-line
|
@ob_clean(); // @phpstan-ignore-line
|
||||||
|
|
||||||
if ($this->buffer !== '') {
|
if ($this->buffer !== '') {
|
||||||
$this->flush('INFO');
|
$this->flush();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,36 +52,42 @@ final class KernelDump
|
|||||||
*/
|
*/
|
||||||
public function shutdown(): void
|
public function shutdown(): void
|
||||||
{
|
{
|
||||||
@ob_clean(); // @phpstan-ignore-line
|
$this->disable();
|
||||||
|
|
||||||
if ($this->buffer !== '') {
|
|
||||||
$this->flush('ERROR');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flushes the buffer.
|
* Flushes the buffer.
|
||||||
*/
|
*/
|
||||||
private function flush(string $type): void
|
private function flush(): void
|
||||||
{
|
{
|
||||||
View::renderUsing($this->output);
|
View::renderUsing($this->output);
|
||||||
|
|
||||||
if ($this->isOpeningHeadline($this->buffer)) {
|
if ($this->isOpeningHeadline($this->buffer)) {
|
||||||
$this->buffer = implode(PHP_EOL, array_slice(explode(PHP_EOL, $this->buffer), 2));
|
$this->buffer = implode(PHP_EOL, array_slice(explode(PHP_EOL, $this->buffer), 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$type = 'INFO';
|
||||||
|
|
||||||
if ($this->isInternalError($this->buffer)) {
|
if ($this->isInternalError($this->buffer)) {
|
||||||
|
$type = 'ERROR';
|
||||||
$this->buffer = str_replace('An error occurred inside PHPUnit.', '', $this->buffer);
|
$this->buffer = str_replace('An error occurred inside PHPUnit.', '', $this->buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->buffer = trim($this->buffer);
|
$this->buffer = trim($this->buffer);
|
||||||
$this->buffer = rtrim($this->buffer, '.').'.';
|
$this->buffer = rtrim($this->buffer, '.').'.';
|
||||||
|
|
||||||
|
$lines = explode(PHP_EOL, $this->buffer);
|
||||||
|
|
||||||
|
$lines = array_reverse($lines);
|
||||||
|
$firstLine = array_pop($lines);
|
||||||
|
$lines = array_reverse($lines);
|
||||||
|
|
||||||
View::render('components.badge', [
|
View::render('components.badge', [
|
||||||
'type' => $type,
|
'type' => $type,
|
||||||
'content' => $this->buffer,
|
'content' => $firstLine,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$this->output->writeln($lines);
|
||||||
|
|
||||||
$this->buffer = '';
|
$this->buffer = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@ namespace Pest;
|
|||||||
|
|
||||||
use NunoMaduro\Collision\Writer;
|
use NunoMaduro\Collision\Writer;
|
||||||
use Pest\Support\Container;
|
use Pest\Support\Container;
|
||||||
|
use Symfony\Component\Console\Output\ConsoleOutput;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
use Whoops\Exception\Inspector;
|
use Whoops\Exception\Inspector;
|
||||||
@ -39,7 +40,11 @@ final class Panic
|
|||||||
private function handle(): void
|
private function handle(): void
|
||||||
{
|
{
|
||||||
/** @var OutputInterface $output */
|
/** @var OutputInterface $output */
|
||||||
$output = Container::getInstance()->get(OutputInterface::class);
|
try {
|
||||||
|
$output = Container::getInstance()->get(OutputInterface::class);
|
||||||
|
} catch (Throwable) {
|
||||||
|
$output = new ConsoleOutput();
|
||||||
|
}
|
||||||
|
|
||||||
if ($this->throwable instanceof Contracts\Panicable) {
|
if ($this->throwable instanceof Contracts\Panicable) {
|
||||||
$this->throwable->render($output);
|
$this->throwable->render($output);
|
||||||
@ -51,7 +56,6 @@ final class Panic
|
|||||||
|
|
||||||
$inspector = new Inspector($this->throwable);
|
$inspector = new Inspector($this->throwable);
|
||||||
|
|
||||||
$output->writeln('');
|
|
||||||
$writer->write($inspector);
|
$writer->write($inspector);
|
||||||
$output->writeln('');
|
$output->writeln('');
|
||||||
|
|
||||||
|
|||||||
@ -91,7 +91,7 @@ final class TestSuite
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (! self::$instance instanceof self) {
|
if (! self::$instance instanceof self) {
|
||||||
throw new InvalidPestCommand();
|
Panic::with(new InvalidPestCommand());
|
||||||
}
|
}
|
||||||
|
|
||||||
return self::$instance;
|
return self::$instance;
|
||||||
|
|||||||
Reference in New Issue
Block a user