Saltar al contenido principal

Pruebas de consola

En Laravel puedes escribir de forma concisa pruebas para comandos Artisan que incluyen la entrada y la salida.
Esta página está alineada con la API de pruebas de consola más reciente de Laravel y trata también expectsSearch, que verifica la entrada de búsqueda de Laravel Prompts.

Introducción

Ejecuta el comando con el método artisan y encadena los valores esperados para validarlo.
test('comando question', function () {
    // Verifica en orden la entrada del usuario y la salida
    $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);
});

Aserciones de éxito / fallo

Puedes verificar el código de salida para determinar si el comando terminó correctamente o falló.
$this->artisan('inspire')->assertExitCode(0);
$this->artisan('inspire')->assertSuccessful();
$this->artisan('inspire')->assertFailed();

Valores esperados de entrada / salida

Valores esperados de entrada

Puedes simular las interacciones del usuario ante entradas de pregunta o de búsqueda.
// Simula tanto la entrada de pregunta como la de búsqueda
$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);

Valores esperados de salida

Puedes verificar coincidencia exacta, coincidencia parcial y la visualización de tablas.
// Comprueba que solo se muestre la salida esperada
$this->artisan('users:all')
    ->expectsOutput('The expected output')
    ->doesntExpectOutput('Unexpected output')
    ->expectsOutputToContain('expected')
    ->expectsTable([
        'ID',
        'Email',
    ], [
        [1, '[email protected]'],
        [2, '[email protected]'],
    ])
    ->assertExitCode(0);

Valores esperados de confirmación

Para prompts de confirmación de tipo Sí/No, usa expectsConfirmation.
$this->artisan('module:import')
    ->expectsConfirmation('Do you really wish to run this command?', 'no')
    ->assertExitCode(1);

Eventos de consola

Por defecto, CommandStarting y CommandFinished no se disparan al ejecutar las pruebas. Añade WithConsoleEvents a las clases de prueba que necesiten verificar dichos eventos.
<?php

namespace Tests\Feature;

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

class ConsoleEventTest extends TestCase
{
    use WithConsoleEvents;
}
Usa WithConsoleEvents únicamente en las pruebas que lo necesiten para mantener la velocidad habitual del resto del conjunto de pruebas.
Última modificación el 13 de julio de 2026