Zum Hauptinhalt springen

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);
});

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