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

# Tests de console

> Apprenez à tester les commandes Artisan dans Laravel (valeurs attendues d'entrée/sortie, vérification du code de sortie, événements de console).

# Tests de console

Dans Laravel, vous pouvez écrire de manière concise des tests pour les commandes Artisan, y compris les entrées et les sorties.

<Info>
  Cette page est alignée sur l'API de tests de console la plus récente de Laravel et couvre également `expectsSearch` qui vérifie les entrées de recherche de Laravel Prompts.
</Info>

## Introduction

Utilisez la méthode `artisan` pour exécuter une commande et chaînez les assertions pour la vérifier.

<Tabs>
  <Tab title="Pest">
    ```php theme={null}
    test('commande question', function () {
        // Vérifie séquentiellement l'entrée utilisateur et la sortie
        $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
    {
        // Vérifie le flux interactif de la commande
        $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[Exécuter la commande avec artisan] --> B[Définir les entrées attendues]
    B --> C[Vérifier la sortie ou la table]
    C --> D[Vérifier le code de sortie]
```

## Assertions de succès / échec

Vous pouvez déterminer le succès ou l'échec d'une commande en vérifiant son code de sortie.

```php theme={null}
$this->artisan('inspire')->assertExitCode(0);
$this->artisan('inspire')->assertSuccessful();
$this->artisan('inspire')->assertFailed();
```

## Valeurs attendues d'entrée / sortie

### Entrées attendues

Vous pouvez simuler les interactions utilisateur pour les questions ou les recherches.

```php theme={null}
// Simule à la fois une question et une recherche
$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);
```

### Sorties attendues

Vous pouvez vérifier une correspondance exacte, partielle ou l'affichage sous forme de tableau.

```php theme={null}
// Vérifie que seule la sortie attendue est affichée
$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);
```

## Confirmations attendues

Pour une invite de confirmation Yes / No, utilisez `expectsConfirmation`.

```php theme={null}
$this->artisan('module:import')
    ->expectsConfirmation('Do you really wish to run this command?', 'no')
    ->assertExitCode(1);
```

## Événements de console

Par défaut, `CommandStarting` et `CommandFinished` ne sont pas déclenchés lors de l'exécution des tests.

Ajoutez `WithConsoleEvents` aux classes de test qui nécessitent la vérification des événements.

```php theme={null}
<?php

namespace Tests\Feature;

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

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

<Tip>
  Utilisez `WithConsoleEvents` uniquement dans les tests qui en ont besoin, afin de préserver la vitesse d'exécution des autres tests.
</Tip>


## Related topics

- [Tests de navigateur (Dusk)](/fr/dusk.md)
- [Tests de base de données](/fr/database-testing.md)
- [Cycle de vie d'une requête](/fr/lifecycle.md)
- [Console Artisan](/fr/artisan.md)
- [Tutoriel - Laravel Console Starter](/fr/packages/laravel-console-starter/tutorial.md)
