Vai al contenuto principale

Panoramica

Le funzionalità principali di laravel-bluesky sono fornite tramite la Facade Bluesky, quindi puoi testarle con i mock standard di Laravel. Per il testing di pacchetti in generale, consulta anche package-testing.

Mock della Facade

Con Bluesky::expects() puoi mockare intere catene di metodi.
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 usa internamente il client HTTP di Laravel. Se metti Http::preventStrayRequests() nel setUp(), individui subito le richieste esterne non previste.
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() lancia un’eccezione se durante i test viene generata una vera richiesta esterna. Rileva subito le comunicazioni esterne non volute, aumentando l’affidabilità dei test.

Funzionalità che non si possono mockare

FeedGenerator

FeedGenerator viene invocato dal lato server di Bluesky, quindi non è disponibile un mock end-to-end. La parte dell’algoritmo del FeedGenerator è comunque mockabile.
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) {
        // È necessaria l'autenticazione a causa delle restrizioni dell'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

Le funzionalità core di Bluesky/AtProtocol non richiedono accessi esterni, quindi non serve mockarle.
Ultima modifica il 13 luglio 2026