> ## 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 pour Laravel

> Découvrez comment tester avec Copilot::fake(), les assertions et la protection contre les requêtes parasites de Laravel Copilot SDK.

Voici le style de tests que vous pouvez écrire avec Laravel.

## Copilot::fake()

`Copilot::fake()` fournit des mocks pour les fonctionnalités utilisées via la Facade Copilot. Il ne mocke pas les autres fonctionnalités.

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

Copilot::fake('2'); // Mock qui renvoie toujours '2'

$response = Copilot::run(prompt: '1 + 1'); // Ici Copilot CLI n'est pas réellement appelé

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

Lorsque `Copilot::start` effectue plusieurs appels :

```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'); // Renvoie '2'
    $response2 = $session->sendAndWait(prompt: '2 + 2'); // Renvoie '4'
});

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

## Assertions

Vérifier qu'un prompt spécifique a été appelé.

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

Vérifier qu'un prompt n'a pas été appelé.

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

Vérifier le nombre d'appels de prompts.

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

Vérifier qu'aucun prompt n'a été envoyé.

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

## Empêcher les requêtes parasites

Bloque toutes les requêtes JSON-RPC. Si une est appelée, l'exception `Revolution\Copilot\Exceptions\StrayRequestException` est levée.

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

Pour n'autoriser que certaines commandes :

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

Désactiver la protection :

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

Seules les requêtes JSON-RPC sont bloquées, donc `Client::start()` ne l'est pas.

## Usages qui peuvent ne pas fonctionner correctement

Lorsque vous utilisez Copilot dans une commande Artisan, le mock via `fake()` fonctionne, mais les `assertPrompt()` qui suivent peuvent ne pas fonctionner correctement. Le cas est peu documenté et fait encore l'objet d'investigations.

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

Copilot::fake('Hello');

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

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

## shouldReceive() / expects()

Bien sûr, les `shouldReceive()` et `expects()` de Mockery sont également utilisables.
C'est une capacité inhérente aux Facades, aussi nous ne l'expliquons pas ici.

<Info>
  Pour les dernières informations, consultez le [dépôt GitHub](https://github.com/invokable/laravel-copilot-sdk).
</Info>


## Related topics

- [GitHub Copilot SDK pour Laravel](/fr/packages/laravel-copilot-sdk/index.md)
- [GitHub Actions - GitHub Copilot SDK pour Laravel](/fr/packages/laravel-copilot-sdk/github-actions.md)
- [Démarrer - GitHub Copilot SDK pour Laravel](/fr/packages/laravel-copilot-sdk/getting-started.md)
- [Authentification - GitHub Copilot SDK pour Laravel](/fr/packages/laravel-copilot-sdk/auth.md)
- [Laravel Cloud - GitHub Copilot SDK pour Laravel](/fr/packages/laravel-copilot-sdk/laravel-cloud.md)
