Introduction
In addition to simplifying HTTP testing, Laravel provides a simple API for testing console applications that ask for user input.
Expecting Input / Output
Laravel allows you to easily "mock" user input for your console
commands using the expectsQuestion
method. In addition, you
may specify the exit code and text that you expect to be output by the
console command using the assertExitCode
and
expectsOutput
methods. For example, consider the following
console command:
Artisan::command('question', function () {
$name = $this->ask('What is your name?');
$language = $this->choice('Which language do you program in?', [
'PHP',
'Ruby',
'Python',
]);
$this->line('Your name is '.$name.' and you program in '.$language.'.');
});
You may test this command with the following test which utilizes the
expectsQuestion
, expectsOutput
, and
assertExitCode
methods:
/**
* Test a console command.
*
* @return void
*/
public function test_console_command()
{
$this->artisan('question')
->expectsQuestion('What is your name?', 'Taylor Otwell')
->expectsQuestion('Which language do you program in?', 'PHP')
->expectsOutput('Your name is Taylor Otwell and you program in PHP.')
->assertExitCode(0);
}