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

# Pruebas de consola

> Aprende a probar comandos Artisan en Laravel (valores esperados de entrada/salida, verificación del código de salida y verificación de eventos de consola).

# Pruebas de consola

En Laravel puedes escribir de forma concisa pruebas para comandos Artisan que incluyen la entrada y la salida.

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

## Introducción

Ejecuta el comando con el método `artisan` y encadena los valores esperados para validarlo.

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

  <Tab title="PHPUnit">
    ```php theme={null}
    public function test_question_command(): void
    {
        // Comprueba el flujo interactivo 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[Ejecutar el comando con artisan] --> B[Definir los valores esperados de entrada]
    B --> C[Verificar salida o tabla]
    C --> D[Verificar el código de salida]
```

## Aserciones de éxito / fallo

Puedes verificar el código de salida para determinar si el comando terminó correctamente o falló.

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

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

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

## Valores esperados de confirmación

Para prompts de confirmación de tipo Sí/No, usa `expectsConfirmation`.

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

namespace Tests\Feature;

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

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

<Tip>
  Usa `WithConsoleEvents` únicamente en las pruebas que lo necesiten para mantener la velocidad habitual del resto del conjunto de pruebas.
</Tip>


## Related topics

- [Consola Artisan](/es/artisan.md)
- [Pruebas de navegador (Dusk)](/es/dusk.md)
- [Pruebas de base de datos](/es/database-testing.md)
- [Ciclo de vida de la solicitud](/es/lifecycle.md)
- [Laravel Maestro — Orquestador de desarrollo de starter kits](/es/blog/maestro-introduction.md)
