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

# Testing - GitHub Copilot SDK for Laravel

> Descrive come testare Laravel Copilot SDK usando Copilot::fake(), assertion e prevenzione delle stray request.

Con Laravel puoi scrivere codice di test come questo.

## Copilot::fake()

`Copilot::fake()` è un mock per le funzionalità usate tramite il Facade Copilot. Non fa il mock di altre funzionalità.

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

Copilot::fake('2'); // mock che restituisce sempre '2'

$response = Copilot::run(prompt: '1 + 1'); // qui la Copilot CLI non viene realmente invocata

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

Con più chiamate all'interno di `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'); // restituisce '2'
    $response2 = $session->sendAndWait(prompt: '2 + 2'); // restituisce '4'
});

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

## Assertion

Verifica che un prompt specifico sia stato invocato.

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

Verifica che un prompt non sia stato invocato.

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

Verifica quante volte è stato invocato un prompt.

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

Verifica che nessun prompt sia stato invocato.

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

## Prevent stray requests

Blocca tutte le richieste JSON-RPC. Se ne viene effettuata una, viene sollevata l'eccezione `Revolution\Copilot\Exceptions\StrayRequestException`.

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

Per consentire solo alcuni comandi.

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

Per disattivare il blocco.

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

Poiché vengono bloccate solo le richieste JSON-RPC, `Client::start()` non è bloccato.

## Utilizzi che potrebbero non funzionare correttamente

Se usi Copilot all'interno di un comando Artisan, il mock con `fake()` è efficace ma `assertPrompt()` e simili potrebbero non funzionare correttamente. Ci sono pochi esempi d'uso, è in fase di indagine.

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

Copilot::fake('Hello');

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

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

## shouldReceive() / expects()

Naturalmente puoi usare anche `shouldReceive()` e `expects()`, ben noti da Mockery.
Sono funzionalità supportate automaticamente quando usi un Facade, quindi non le descriviamo qui.

<Info>
  Per le informazioni più recenti fai riferimento al [repository GitHub](https://github.com/invokable/laravel-copilot-sdk).
</Info>


## Related topics

- [GitHub Actions - GitHub Copilot SDK for Laravel](/it/packages/laravel-copilot-sdk/github-actions.md)
- [GitHub Copilot SDK for Laravel](/it/packages/laravel-copilot-sdk/index.md)
- [Introduzione - GitHub Copilot SDK for Laravel](/it/packages/laravel-copilot-sdk/getting-started.md)
- [Autenticazione - GitHub Copilot SDK for Laravel](/it/packages/laravel-copilot-sdk/auth.md)
- [Laravel Cloud - GitHub Copilot SDK for Laravel](/it/packages/laravel-copilot-sdk/laravel-cloud.md)
