InteractsWithConsole.php
TLDR
The file InteractsWithConsole.php
is a trait that provides methods for interacting with the console in the Laravel framework's testing package. It allows for mocking the console output, defining expected output and question prompts, and running artisan commands.
Methods
artisan
This method is used to call an artisan command and return the command's output. If console output mocking is disabled, it will call the command using the Laravel application's kernel. If mocking is enabled, it will return a PendingCommand
object.
withoutMockingConsoleOutput
This method is used to disable mocking of the console output. It sets the $mockConsoleOutput
property to false
and removes the OutputStyle
binding from the Laravel application.
<?php
namespace Illuminate\Foundation\Testing\Concerns;
use Illuminate\Console\OutputStyle;
use Illuminate\Contracts\Console\Kernel;
use Illuminate\Testing\PendingCommand;
trait InteractsWithConsole
{
/**
* Indicates if the console output should be mocked.
*
* @var bool
*/
public $mockConsoleOutput = true;
/**
* All of the expected output lines.
*
* @var array
*/
public $expectedOutput = [];
/**
* All of the expected text to be present in the output.
*
* @var array
*/
public $expectedOutputSubstrings = [];
/**
* All of the output lines that aren't expected to be displayed.
*
* @var array
*/
public $unexpectedOutput = [];
/**
* All of the text that is not expected to be present in the output.
*
* @var array
*/
public $unexpectedOutputSubstrings = [];
/**
* All of the expected output tables.
*
* @var array
*/
public $expectedTables = [];
/**
* All of the expected questions.
*
* @var array
*/
public $expectedQuestions = [];
/**
* All of the expected choice questions.
*
* @var array
*/
public $expectedChoices = [];
/**
* Call artisan command and return code.
*
* @param string $command
* @param array $parameters
* @return \Illuminate\Testing\PendingCommand|int
*/
public function artisan($command, $parameters = [])
{
if (! $this->mockConsoleOutput) {
return $this->app[Kernel::class]->call($command, $parameters);
}
return new PendingCommand($this, $this->app, $command, $parameters);
}
/**
* Disable mocking the console output.
*
* @return $this
*/
protected function withoutMockingConsoleOutput()
{
$this->mockConsoleOutput = false;
$this->app->offsetUnset(OutputStyle::class);
return $this;
}
}