> ## 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 - GitHub Copilot SDK for Laravel

> Explica cómo escribir tests con Copilot::fake(), aserciones y prevención de stray requests en Laravel Copilot SDK.

En Laravel puedes escribir código de test como el siguiente.

## Copilot::fake()

`Copilot::fake()` es un mock para las funciones que se usan a través del Facade Copilot. No mockea otras funcionalidades.

```php theme={null}
use Revolution\Copilot\Facades\Copilot;

Copilot::fake('2'); // mock que siempre devuelve '2'

$response = Copilot::run(prompt: '1 + 1'); // aquí Copilot CLI no se llama realmente

// Pest
expect($response->content())->toBe('2');
// PHPUnit
$this->assertEquals('2', $response->content());
```

Con varias llamadas dentro de `Copilot::start`:

```php theme={null}
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Contracts\CopilotSession;

Copilot::fake([
    '*' => Copilot::sequence()
            ->push(Copilot::response('2'))
            ->push(Copilot::response('4')),
]);

Copilot::start(function (CopilotSession $session) use (&$response1, &$response2) {
    $response1 = $session->sendAndWait(prompt: '1 + 1'); // devuelve '2'
    $response2 = $session->sendAndWait(prompt: '2 + 2'); // devuelve '4'
});

expect($response1->content())->toBe('2');
```

## Aserciones

Comprueba que se ha invocado un prompt concreto:

```php theme={null}
Copilot::assertPrompt('1 + *');
```

Comprueba que un prompt no se ha invocado:

```php theme={null}
Copilot::assertNotPrompt('1 + *');
```

Comprueba el número de veces que se ha invocado un prompt:

```php theme={null}
Copilot::assertPromptCount(3);
```

Comprueba que no se ha invocado ningún prompt:

```php theme={null}
Copilot::assertNothingSent();
```

## Prevent stray requests

Bloquea todas las peticiones JSON-RPC. Si se realiza alguna, se lanza la excepción `Revolution\Copilot\Exceptions\StrayRequestException`.

```php theme={null}
Copilot::preventStrayRequests();
```

Si quieres permitir solo algunos comandos:

```php theme={null}
Copilot::preventStrayRequests(allow: ['ping']);
```

Detener la prevención:

```php theme={null}
Copilot::preventStrayRequests(false);
```

Solo se bloquean las peticiones JSON-RPC, así que `Client::start()` no se bloquea.

## Usos que quizá no funcionen bien

Si usas Copilot dentro de un comando Artisan, el mock con `fake()` sí funciona, pero `assertPrompt()` y similares pueden no comportarse correctamente. Hay pocos casos de uso, así que está en investigación.

```php theme={null}
use Revolution\Copilot\Facades\Copilot;

Copilot::fake('Hello');

$this->artisan('copilot:hi');

Copilot::assertPrompt('Hi');
```

## shouldReceive() / expects()

Por supuesto, también puedes usar los conocidos `shouldReceive()` y `expects()` de Mockery.
Como es una característica que se admite automáticamente al usar el Facade, se omite la explicación.

<Info>
  Consulta la información más reciente en el [repositorio de GitHub](https://github.com/invokable/laravel-copilot-sdk).
</Info>


## Related topics

- [GitHub Actions - GitHub Copilot SDK for Laravel](/es/packages/laravel-copilot-sdk/github-actions.md)
- [GitHub Copilot SDK for Laravel](/es/packages/laravel-copilot-sdk/index.md)
- [Autenticación - GitHub Copilot SDK for Laravel](/es/packages/laravel-copilot-sdk/auth.md)
- [Laravel Cloud - GitHub Copilot SDK for Laravel](/es/packages/laravel-copilot-sdk/laravel-cloud.md)
- [Primeros pasos - GitHub Copilot SDK for Laravel](/es/packages/laravel-copilot-sdk/getting-started.md)
