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

# 테스트 - GitHub Copilot SDK for Laravel

> Laravel Copilot SDK의 Copilot::fake(), 어서션, Stray request 방지를 사용한 테스트 방법을 설명합니다.

Laravel이라면 이런 테스트 코드를 작성할 수 있습니다.

## Copilot::fake()

`Copilot::fake()`는 Copilot Facade에서 사용하는 기능을 위한 목입니다. 다른 기능은 목하지 않습니다.

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

Copilot::fake('2'); // 항상 '2'를 반환하는 목

$response = Copilot::run(prompt: '1 + 1'); // 여기서 실제로 Copilot CLI가 호출되지 않음

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

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

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

## 어서션

특정 프롬프트가 호출되었음을 확인합니다.

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

프롬프트가 호출되지 않았음을 확인합니다.

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

프롬프트가 호출된 횟수를 확인합니다.

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

프롬프트가 한 번도 호출되지 않았음을 확인합니다.

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

## Prevent stray requests

JSON-RPC 요청을 모두 방지합니다. 호출한 경우 예외 `Revolution\Copilot\Exceptions\StrayRequestException`이 발생합니다.

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

일부 명령만 허용하는 경우입니다.

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

방지 중지입니다.

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

방지하는 것은 JSON-RPC 요청뿐이므로 `Client::start()`는 방지하지 않습니다.

## 정상적으로 동작하지 않을 수 있는 사용법

Artisan 명령어 내에서 Copilot을 사용하는 경우, `fake()`로의 목은 유효하지만 그 후의 `assertPrompt()` 등이 올바르게 동작하지 않는 경우가 있습니다. 사용 사례가 적어 조사 중입니다.

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

Copilot::fake('Hello');

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

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

## shouldReceive() / expects()

Mockery에서 익숙한 `shouldReceive()`나 `expects()`도 당연히 사용할 수 있습니다.
Facade를 사용하면 자동으로 대응되는 기능이므로 설명은 생략합니다.

<Info>
  최신 정보는 [GitHub 저장소](https://github.com/invokable/laravel-copilot-sdk)를 참고하세요.
</Info>


## Related topics

- [GitHub Copilot SDK for Laravel](/ko/packages/laravel-copilot-sdk/index.md)
- [시작하기 - GitHub Copilot SDK for Laravel](/ko/packages/laravel-copilot-sdk/getting-started.md)
- [GitHub Actions - GitHub Copilot SDK for Laravel](/ko/packages/laravel-copilot-sdk/github-actions.md)
- [Laravel Boost Custom Agent for GitHub Copilot CLI](/ko/packages/laravel-boost-copilot-cli.md)
- [인증 - GitHub Copilot SDK for Laravel](/ko/packages/laravel-copilot-sdk/auth.md)
