Console Tests
To get started, let’s explore how to make assertions regarding an Artisan command’s exit code. To accomplish this, we will use the method to invoke an Artisan command from our test. Then, we will use the assertExitCode
method to assert that the command completed with a given exit code:
$this->artisan('inspire')->assertNotExitCode(1);
Of course, all terminal commands typically exit with a status code of 0
when they are successful and a non-zero exit code when they are not successful. Therefore, for convenience, you may utilize the assertSuccessful
and assertFailed
assertions to assert that a given command exited with a successful exit code or not:
Artisan::command('question', function () { $name = $this->ask('What is your name?'); $language = $this->choice('Which language do you prefer?', [ 'PHP', 'Ruby', 'Python', ]); $this->line('Your name is '.$name.' and you prefer '.$language.'.');});
You may test this command with the following test which utilizes the expectsQuestion
, expectsOutput
, doesntExpectOutput
, , doesntExpectOutputToContain
, and assertExitCode
methods:
Confirmation Expectations
$this->artisan('module:import') ->expectsConfirmation('Do you really wish to run this command?', 'no') ->assertExitCode(1);
Table Expectations
If your command displays a table of information using Artisan’s table
method, it can be cumbersome to write output expectations for the entire table. Instead, you may use the expectsTable
method. This method accepts the table’s headers as its first argument and the table’s data as its second argument: