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.