Vai al contenuto principale

Test da console

In Laravel puoi scrivere in modo conciso test che coprono input e output dei comandi Artisan.
Questa pagina è allineata all’API più recente per i test da console di Laravel e tratta anche expectsSearch, che verifica l’input di ricerca di Laravel Prompts.

Introduzione

Esegui un comando con il metodo artisan e verifica i valori attesi concatenando le asserzioni.
test('question command', function () {
    // Verifica in ordine l'input dell'utente e l'output
    $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);
});

Asserzioni di successo / fallimento

Puoi determinare il successo o il fallimento di un comando verificando lo stato di uscita.
$this->artisan('inspire')->assertExitCode(0);
$this->artisan('inspire')->assertSuccessful();
$this->artisan('inspire')->assertFailed();

Valori attesi di input / output

Valori attesi in input

Puoi simulare le interazioni dell’utente con input di domanda o di ricerca.
// Simula sia gli input di domanda sia quelli di ricerca
$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);

Valori attesi in output

Puoi verificare corrispondenza esatta, corrispondenza parziale delle stringhe di output e la visualizzazione di tabelle.
// Verifica che venga mostrato solo l'output atteso
$this->artisan('users:all')
    ->expectsOutput('The expected output')
    ->doesntExpectOutput('Unexpected output')
    ->expectsOutputToContain('expected')
    ->expectsTable([
        'ID',
        'Email',
    ], [
        [1, '[email protected]'],
        [2, '[email protected]'],
    ])
    ->assertExitCode(0);

Valori attesi di conferma

Per i prompt di conferma Yes / No usa expectsConfirmation.
$this->artisan('module:import')
    ->expectsConfirmation('Do you really wish to run this command?', 'no')
    ->assertExitCode(1);

Eventi della console

Per impostazione predefinita, durante l’esecuzione dei test CommandStarting / CommandFinished non vengono emessi. Aggiungi WithConsoleEvents alle classi di test che devono verificare gli eventi.
<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\WithConsoleEvents;
use Tests\TestCase;

class ConsoleEventTest extends TestCase
{
    use WithConsoleEvents;
}
Usa WithConsoleEvents solo nei test in cui serve davvero: manterrai più facilmente la velocità dei test ordinari.
Ultima modifica il 13 luglio 2026