---
title: "Testovanie — Auth for Laravel | Roundly"
description: "Konajte ako účet so skutočným párom tokenov, overujte doménové udalosti cez Event::fake() a kontrolujte prihlasovaciu aktivitu aj invalidáciu tokenov."
url: https://roundly-consulting.com/sk/open-source/navody/auth-for-laravel/testovanie
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Auth for Laravel](https://roundly-consulting.com/sk/open-source/navody/auth-for-laravel.md)

# Testovanie

Pridajte trait InteractsWithAuthentication do test case, ktorý má HTTP testovací concern Laravelu:

```php
use RoundlyConsulting\Auth\Enums\ActivityOutcome;
use RoundlyConsulting\Auth\Enums\ActivityType;
use RoundlyConsulting\Auth\Enums\InvalidationReason;
use RoundlyConsulting\Auth\Testing\InteractsWithAuthentication;

abstract class TestCase extends BaseTestCase
{
    use InteractsWithAuthentication;
}

$this->actingAsAccount($user)->getJson('/api/orders')->assertOk();        // a REAL token pair (fires TokensIssued)
$this->assertLoginActivity('users', ActivityType::PasswordLogin, ActivityOutcome::Succeeded);
$this->assertTokensInvalidated($user, InvalidationReason::PasswordChanged);   // moved since actingAsAccount() (or pass since:)
```

| Pomocník | Popis |
| --- | --- |
| `actingAsAccount($account, ?$guard, $authMethods)` | Vydá skutočný pár tokenov cez issueTokens() (takže nastane TokensIssued) a nastaví Authorization: Bearer; požiadavky prechádzajú skutočným jwt guardom, audience, denylistom aj kontrolou verzie tokenu. |
| `assertLoginActivity($guard, ActivityType, ActivityOutcome)` | Existuje zodpovedajúci záznam prihlasovacej aktivity. |
| `assertTokensInvalidated($account, InvalidationReason, ?$guard, ?$since)` | Od actingAsAccount() (alebo since:) sa verzia tokenu posunula a pri rozsahu all neprežila žiadna z relácií, ktoré boli aktívne, keď actingAsAccount() účet prihlásil (neskoršie prihlásenie, napr. po obnove hesla s passwords.reset.login\_after, sa neposudzuje; len so since: nesmie byť aktívna žiadna relácia) — pri dôvode s rozsahom none sa naopak neposunula. Rozsah sa berie z $guard, inak z predvoleného guardu: účet iného guardu vyhodí AuthenticationMisconfigured, preto pri inom ako predvolenom guarde guard zadajte. |

Predvolené $authMethods (\[AuthMethodReference::Pwd\]) predstavujú prihlásenie len heslom. Ak chcete simulovať dokončené prihlásenie s 2FA — také, aké brána opätovného overenia očakáva od účtu s faktorom —, odovzdajte \[AuthMethodReference::Pwd, AuthMethodReference::Otp, AuthMethodReference::Mfa\].

## Overenie doménových udalostí

Authentication::fake() zámerne neexistuje. Každý zápis už spúšťa doménovú udalosť — overíte ju cez Event::fake() v Laraveli, zatiaľ čo beží skutočný tok — a pomocníci vyššie vydávajú skutočné páry tokenov, takže test prejde kontrolami guardu, audience, denylistu aj verzie tokenu, ktoré by stub skryl:

```php
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Auth\Events\PasswordChanged;
use RoundlyConsulting\Auth\Facades\Authentication;

Event::fake([PasswordChanged::class]);

Authentication::passwords()->set($user, 'n3w-Passphrase!');

Event::assertDispatched(PasswordChanged::class);
```

Celý tok proti endpointom balíka:

```php
use Illuminate\Support\Facades\Hash;
use RoundlyConsulting\Auth\Enums\ActivityOutcome;
use RoundlyConsulting\Auth\Enums\ActivityType;

it('signs in with a password', function () {
    $user = User::factory()->create(['password' => Hash::make('correct-horse-battery')]);

    $this->postJson('/users/auth/login', [       // routes.enabled = true, default prefix
        'identifier' => $user->email,
        'password' => 'correct-horse-battery',
    ])->assertOk()->assertJsonPath('status', 'authenticated');

    $this->assertLoginActivity('users', ActivityType::PasswordLogin, ActivityOutcome::Succeeded);
});
```

TwoFactor::fake() a Passkeys::fake() z nižších balíkov naďalej fungujú a RoundlyConsulting\\Passkeys\\Testing\\VirtualAuthenticator spúšťa skutočné passkey ceremoniály. Factories sú pripravené pre všetky štyri modely balíka.

## Overenie, kto konal

Akcia administrátora odovzdáva actor:; overte ho na udalosti alebo na notifikácii:

```php
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Notification;
use RoundlyConsulting\Auth\Events\PasswordChanged;
use RoundlyConsulting\Auth\Notifications\PasswordChangedNotification;

Event::fake([PasswordChanged::class]);
Notification::fake();

Authentication::passwords()->set($user, 'n3w-Passphrase!', actor: $admin);

Event::assertDispatched(PasswordChanged::class, fn (PasswordChanged $event): bool => $event->actor?->is($admin) === true);
Notification::assertSentTo($user, PasswordChangedNotification::class,
    fn (PasswordChangedNotification $notification): bool => $notification->data->actor?->is($admin) === true);
```

$event->actor je model (pri vlastnej zmene účtu null); $notification->data->actor je odkaz ActorData. Text overíte vykreslením: $notification->toMail($user)->subject.

## Testy balíka

```bash
composer test            # Pest
composer test-coverage   # Pest with --min=95
composer analyse         # Larastan level 7
composer format          # Pint
```

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/auth-for-laravel.md)
