跳转到主要内容
在 Laravel 中可以像下面这样编写测试代码。

Copilot::fake()

Copilot::fake() 是针对通过 Copilot Facade 使用的功能的 mock。其他功能不做 mock。
use Revolution\Copilot\Facades\Copilot;

Copilot::fake('2'); // 总是返回 '2' 的 mock

$response = Copilot::run(prompt: '1 + 1'); // 这里实际上不会调用 Copilot CLI

// Pest
expect($response->content())->toBe('2');
// PHPUnit
$this->assertEquals('2', $response->content());
Copilot::start 中多次调用时。
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');

断言

确认特定 prompt 被调用过。
Copilot::assertPrompt('1 + *');
确认某个 prompt 没有被调用。
Copilot::assertNotPrompt('1 + *');
确认 prompt 被调用的次数。
Copilot::assertPromptCount(3);
确认 prompt 一次都没有被调用。
Copilot::assertNothingSent();

Prevent stray requests

禁止所有 JSON-RPC 请求。一旦调用就会抛出异常 Revolution\Copilot\Exceptions\StrayRequestException
Copilot::preventStrayRequests();
只允许一部分命令的情况。
Copilot::preventStrayRequests(allow: ['ping']);
停止防止。
Copilot::preventStrayRequests(false);
因为只防止 JSON-RPC 请求,所以不会阻止 Client::start()

可能不能正常工作的用法

如果在 Artisan 命令内部使用 Copilot,fake() 的 mock 有效,但之后的 assertPrompt() 等可能无法正常工作。由于使用示例较少,正在调查中。
use Revolution\Copilot\Facades\Copilot;

Copilot::fake('Hello');

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

Copilot::assertPrompt('Hi');

shouldReceive() / expects()

Mockery 中常见的 shouldReceive()expects() 当然也可以使用。 只要使用 Facade 就会自动支持这些功能,因此这里省略说明。
最新信息请参考 GitHub 仓库
最后修改于 2026年7月13日