Überblick
Die zentralen Funktionen von laravel-bluesky werden über die Facade Bluesky bereitgestellt, sodass Sie sie mit den üblichen Laravel-Mocks testen können. Für allgemeine Themen zum Testen von Paketen siehe auch package-testing.
Facade-Mocking
Mit Bluesky::expects() mocken Sie eine komplette Methoden-Chain.
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-Fakes
Intern verwendet laravel-bluesky den HTTP-Client von Laravel. Wenn Sie Http::preventStrayRequests() in setUp() einbauen, werden unerwartete externe Anfragen sofort erkannt.
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() wirft eine Exception, wenn während des Tests tatsächlich eine echte externe Anfrage abgesetzt wird. Unbeabsichtigte externe Zugriffe fallen sofort auf, was die Testverlässlichkeit erhöht.
Nicht mockbare Funktionen
FeedGenerator
Da der FeedGenerator vom Bluesky-Server angesprochen wird, gibt es kein End-to-End-Mocking. Der Algorithmus-Teil des FeedGenerators lässt sich jedoch mocken.
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) {
// Aufgrund einer API-Einschränkung ist Authentifizierung nötig
$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
Die Core-Funktionen von Bluesky/AtProtocol führen keine externen Zugriffe aus, sodass kein Mocking erforderlich ist.
Zuletzt geändert am 13. Juli 2026