Saltar al contenido principal

Descripción general

Las funcionalidades principales de laravel-bluesky están disponibles a través del Facade Bluesky, por lo que puedes testearlas con los mocks estándar de Laravel. Para pruebas de desarrollo de paquetes en general, consulta también package-testing.

Mock del Facade

Con Bluesky::expects() puedes mockear la cadena completa de métodos.
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 utiliza internamente el cliente HTTP de Laravel. Si escribes Http::preventStrayRequests() en el setUp(), detectarás inmediatamente cualquier petición externa inesperada.
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() lanza una excepción cuando durante la ejecución de los tests se produce una petición externa real. Detectas al momento comunicaciones externas no deseadas, lo que mejora la fiabilidad de los tests.

Funcionalidades que no se pueden mockear

FeedGenerator

Como el FeedGenerator es invocado desde el servidor de Bluesky, no hay mock de extremo a extremo. Sin embargo, la parte del algoritmo del FeedGenerator sí es mockeable.
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) {
        // Por restricciones de la API se requiere autenticación
        $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

Como las funciones core de Bluesky/AtProtocol no realizan accesos externos, no es necesario mockearlas.
Última modificación el 13 de julio de 2026