> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Test da console

> Impara a testare i comandi Artisan in Laravel (valori attesi di input/output, verifica del codice di uscita, verifica degli eventi di console).

# Test da console

In Laravel puoi scrivere in modo conciso test che coprono input e output dei comandi Artisan.

<Info>
  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.
</Info>

## Introduzione

Esegui un comando con il metodo `artisan` e verifica i valori attesi concatenando le asserzioni.

<Tabs>
  <Tab title="Pest">
    ```php theme={null}
    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);
    });
    ```
  </Tab>

  <Tab title="PHPUnit">
    ```php theme={null}
    public function test_question_command(): void
    {
        // Verifica il flusso interattivo del comando
        $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);
    }
    ```
  </Tab>
</Tabs>

```mermaid theme={null}
flowchart TD
    A[Esegui il comando con artisan] --> B[Definisci i valori attesi in input]
    B --> C[Verifica l'output o le tabelle]
    C --> D[Verifica lo stato di uscita]
```

## Asserzioni di successo / fallimento

Puoi determinare il successo o il fallimento di un comando verificando lo stato di uscita.

```php theme={null}
$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.

```php theme={null}
// 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.

```php theme={null}
// 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, 'taylor@example.com'],
        [2, 'abigail@example.com'],
    ])
    ->assertExitCode(0);
```

## Valori attesi di conferma

Per i prompt di conferma Yes / No usa `expectsConfirmation`.

```php theme={null}
$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 theme={null}
<?php

namespace Tests\Feature;

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

class ConsoleEventTest extends TestCase
{
    use WithConsoleEvents;
}
```

<Tip>
  Usa `WithConsoleEvents` solo nei test in cui serve davvero: manterrai più facilmente la velocità dei test ordinari.
</Tip>


## Related topics

- [Console Artisan](/it/artisan.md)
- [Test del browser (Dusk)](/it/dusk.md)
- [Laravel Pint](/it/pint.md)
- [Struttura dell'applicazione da Laravel 11](/it/advanced/app-structure.md)
- [Laravel Console Starter](/it/packages/laravel-console-starter/index.md)
