Passer au contenu principal

Vue d’ensemble

Les principales fonctionnalités de laravel-bluesky étant fournies via la Facade Bluesky, vous pouvez les tester avec les mocks standard de Laravel. Pour les tests de packages en général, consultez également package-testing.

Mock de la Facade

Utilisez Bluesky::expects() pour mocker chaque chaîne de méthodes.
use Revolution\Bluesky\Facades\Bluesky;
use Illuminate\Support\Facades\Http;
use Illuminate\Http\Client\Response;

Bluesky::expects('login->getProfile->json')->once()->andReturn([]);
Bluesky::expects('login->getProfile')->once()->andReturn(new Response(Http::response([])->wait()));

HTTP Fake

laravel-bluesky utilise en interne le client HTTP de Laravel. Si vous placez Http::preventStrayRequests() dans setUp(), vous détecterez immédiatement les requêtes externes imprévues.
use Revolution\Bluesky\Facades\Bluesky;
use Illuminate\Support\Facades\Http;

protected function setUp(): void
{
    parent::setUp();

    Http::preventStrayRequests();
}

public function test_post(): void
{
    Http::fake();

    Http::fakeSequence()
        ->push();

    Bluesky::expects('resolveHandle->json')->once()->andReturn('did');
}
Http::preventStrayRequests() lève une exception lorsqu’une véritable requête externe se produit pendant l’exécution des tests. Cela permet de repérer immédiatement les communications externes non intentionnelles et améliore la fiabilité de vos tests.

Fonctionnalités non mockables

FeedGenerator

FeedGenerator étant appelé depuis le serveur Bluesky, il n’existe pas de mock de bout en bout. Cependant, la partie algorithme de FeedGenerator peut être mockée.
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\FeedGenerator\FeedGenerator;

public function test_feed_generator(): void
{
    FeedGenerator::register(name: 'test', algo: function (?int $limit, ?string $cursor) {
        // L'authentification est requise en raison des limitations de l'API
        $posts = Bluesky::login(identifier: config('bluesky.identifier'), password: config('bluesky.password'))
            ->searchPosts(q: '#bluesky')->collect('posts');
        $feed = $posts->map(function (array $post) {
            return ['post' => data_get($post, 'uri')];
        })->toArray();
        return ['feed' => $feed];
    });

    Bluesky::expects('login->searchPosts->collect')->once()->andReturn(collect([['uri' => 'at://']]));

    $response = $this->get(route('bluesky.feed.skeleton', ['feed' => 'at://did:/app.bsky.feed.generator/test']));

    $response->assertSuccessful();
    $response->assertJson(['feed' => [['post' => 'at://']]]);
}

Core

Les fonctionnalités de base de Bluesky/AtProtocol n’impliquant pas d’accès externe, aucun mock n’est nécessaire.
Dernière modification le 13 juillet 2026