Passer au contenu principal

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

Introduction

Utilisez la méthode artisan pour exécuter une commande et chaînez les assertions pour la vérifier.
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);
});

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.
$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.
// 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.
// 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, '[email protected]'],
        [2, '[email protected]'],
    ])
    ->assertExitCode(0);

Confirmations attendues

Pour une invite de confirmation Yes / No, utilisez expectsConfirmation.
$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

namespace Tests\Feature;

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

class ConsoleEventTest extends TestCase
{
    use WithConsoleEvents;
}
Utilisez WithConsoleEvents uniquement dans les tests qui en ont besoin, afin de préserver la vitesse d’exécution des autres tests.
Dernière modification le 13 juillet 2026