> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Tests

> Wie Sie Code testen, der laravel-bluesky verwendet. Facade-Mocking, HTTP-Fakes und Erläuterungen zu Features, die nicht gemockt werden können.

## Ü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](/de/advanced/package-testing).

## Facade-Mocking

Mit `Bluesky::expects()` mocken Sie eine komplette Methoden-Chain.

```php theme={null}
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.

```php theme={null}
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');
}
```

<Tip>
  `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.
</Tip>

## 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.

```php theme={null}
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.

<Info>
  Source: [docs/testing.md](https://github.com/invokable/laravel-bluesky/blob/main/docs/testing.md)
</Info>


## Related topics

- [Eigene Auth-Guards implementieren](/de/advanced/custom-auth-guard.md)
- [Einstieg in Tests](/de/testing.md)
- [HTTP-Tests](/de/http-tests.md)
- [Browser-Tests (Dusk)](/de/dusk.md)
- [Laravel-Tests mit Pest PHP starten](/de/blog/pest-introduction.md)
