Konsolentests
In Laravel können Sie Tests für Artisan-Befehle einschließlich Ein- und Ausgaben knapp und übersichtlich schreiben.
Diese Seite ist auf die aktuelle Konsolentest-API von Laravel abgestimmt und behandelt auch expectsSearch zur Prüfung der Sucheingabe von Laravel Prompts.
Einführung
Sie führen einen Befehl mit der Methode artisan aus und prüfen die Erwartungen über Method Chaining.
test('question command', function () {
// Benutzereingaben und Ausgaben der Reihe nach prüfen
$this->artisan('question')
->expectsQuestion('What is your name?', 'Taylor Otwell')
->expectsQuestion('Which language do you prefer?', 'PHP')
->expectsOutput('Your name is Taylor Otwell and you prefer PHP.')
->doesntExpectOutput('Your name is Taylor Otwell and you prefer Ruby.')
->assertExitCode(0);
});
public function test_question_command(): void
{
// Interaktiven Ablauf des Befehls überprüfen
$this->artisan('question')
->expectsQuestion('What is your name?', 'Taylor Otwell')
->expectsQuestion('Which language do you prefer?', 'PHP')
->expectsOutput('Your name is Taylor Otwell and you prefer PHP.')
->doesntExpectOutput('Your name is Taylor Otwell and you prefer Ruby.')
->assertExitCode(0);
}
Erfolgs- / Fehler-Assertions
Über den Exit-Status können Sie entscheiden, ob der Befehl erfolgreich war oder fehlgeschlagen ist.
$this->artisan('inspire')->assertExitCode(0);
$this->artisan('inspire')->assertSuccessful();
$this->artisan('inspire')->assertFailed();
Erwartete Ein- / Ausgaben
Eingabe-Erwartungen
Sie können Benutzeraktionen für Fragen und Sucheingaben mocken.
// Sowohl Fragen- als auch Sucheingaben mocken
$this->artisan('example')
->expectsQuestion('What is your name?', 'Taylor Otwell')
->expectsSearch('What is your name?', search: 'Tay', answers: [
'Taylor Otwell',
'Taylor Swift',
'Darian Taylor',
], answer: 'Taylor Otwell')
->assertExitCode(0);
Ausgabe-Erwartungen
Sie können exakte Übereinstimmung, Teilstring-Übereinstimmung und Tabellenausgaben prüfen.
// Prüfen, dass nur die erwartete Ausgabe angezeigt wird
$this->artisan('users:all')
->expectsOutput('The expected output')
->doesntExpectOutput('Unexpected output')
->expectsOutputToContain('expected')
->expectsTable([
'ID',
'Email',
], [
[1, '[email protected]'],
[2, '[email protected]'],
])
->assertExitCode(0);
Bestätigungs-Erwartungen
Für Ja/Nein-Bestätigungsprompts verwenden Sie expectsConfirmation.
$this->artisan('module:import')
->expectsConfirmation('Do you really wish to run this command?', 'no')
->assertExitCode(1);
Konsolen-Events
Standardmäßig werden CommandStarting und CommandFinished bei Testausführung nicht ausgelöst.
Fügen Sie in Testklassen, in denen Sie Events prüfen möchten, den Trait WithConsoleEvents hinzu.
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\WithConsoleEvents;
use Tests\TestCase;
class ConsoleEventTest extends TestCase
{
use WithConsoleEvents;
}
Wenn Sie WithConsoleEvents nur in den Tests einsetzen, in denen Sie es tatsächlich benötigen, bleibt die normale Testgeschwindigkeit erhalten.
Zuletzt geändert am 13. Juli 2026