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