---
title: "Testovanie — Teams for Laravel | Roundly"
description: "Teams::fake() zaznamená každú operáciu a pritom ju vykoná, s aserciou pre každú operáciu; Pest matchery a factories skracujú testy."
url: https://roundly-consulting.com/sk/open-source/navody/teams-for-laravel/testovanie
language: sk
---

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

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

# Testovanie

Teams::fake() vloží RoundlyConsulting\\Teams\\Testing\\TeamsFake — zaznamenávajúcu podtriedu TeamsManager — za fasádu aj za väzbu TeamsManager v kontajneri a vráti ju. Operácie sa naďalej vykonajú v testovacej databáze; fake každú zaznamená, takže môžete overiť, o čo váš kód požiadal:

```php
use RoundlyConsulting\Teams\DataTransferObjects\CreateTeamData;
use RoundlyConsulting\Teams\Facades\Teams;

it('creates a team and adds an admin', function () {
    $fake = Teams::fake();   // TeamsFake — also swapped in for an injected TeamsManager
    $owner = User::factory()->create();
    $alice = User::factory()->create();
    $bob = User::factory()->create();

    $team = Teams::create(new CreateTeamData(name: 'Acme', owner: $owner));
    Teams::for($team)->members()->add($alice, 'admin');
    $team->addMember($bob, 'member');   // a model method — recorded too

    $fake->assertTeamCreated('Acme');
    Teams::assertMemberAdded($team, $alice, 'admin');   // the facade forwards to the fake
    Teams::assertMemberAdded($team, $bob);
    Teams::assertNothingRemoved();

    expect($alice)->toBeMemberOf($team);   // the operation really ran
});
```

Každá zmena stavu prechádza jednou metódou managera, takže fake vidí volania cez fasádu, injektovaný TeamsManager, všetky handly, metódy modelov ($team->addMember(), $invite->revoke(), $membership->removeFromTeam()), Artisan príkazy aj listener schvaľovania. Asercie voláte na vrátenom fake objekte alebo cez fasádu.

- Zaznamená sa len operácia, ktorú ste zavolali, nie to, čo robí vnútri — prijatie pozvánky sa zapíše ako prijatie, nie ako pridanie člena, ktoré v ňom prebehne.
- Odmietnuté volanie (pozvánka iného tímu, nečlen) vyhodí výnimku ešte pred vykonaním a nezaznamená sa.
- Registrácia globálnych rolí a oprávnení je konfigurácia pri štarte a nezaznamenáva sa; Teams::members()->expiring() je len čítanie, takže tiež nie.
- Priame volanie akcie obíde manager, preto ho fake nevidí.

## Všetky asercie

| Operácia | Asercia | Negatívna asercia |
| --- | --- | --- |
| `create()` | `assertTeamCreated(?name)` | `assertNothingCreated()` |
| `transferOwnershipTo()` | `assertOwnershipTransferred($team, ?to)` | `assertNothingTransferred()` |
| `members()->add()` | `assertMemberAdded($team, $member, ?role), assertMemberNotAdded($team, $member)` | `assertNothingAdded()` |
| `members()->remove()` | `assertMemberRemoved($team, $member)` | `assertNothingRemoved()` |
| `members()->changeRole()` | `assertRoleChanged($team, $member, ?role)` | `assertNoRoleChanged()` |
| `invites()->create()` | `assertInviteCreated($team, ?email)` | `assertNothingInvited()` |
| `invites()->resend()` | `assertInviteResent($invite)` | `assertNothingResent()` |
| `invites()->revoke()` | `assertInviteRevoked($invite)` | `assertNothingRevoked()` |
| `invites()->accept()` | `assertInviteAccepted(?invite, ?by)` | `assertNothingAccepted()` |
| `joinRequests()->open()` | `assertJoinRequested($team, ?requester)` | `assertNothingRequested()` |
| `joinRequests()->approve()` | `assertJoinRequestApproved($request, ?by)` | `assertNothingApproved()` |
| `joinRequests()->deny()` | `assertJoinRequestDenied($request, ?by)` | `assertNothingDenied()` |
| `roles()->define()` | `assertRoleDefined($team, ?key)` | `assertNothingDefined()` |
| `members()->notifyExpiring()` | `assertExpiringMembersNotified()` | `assertNothingNotified()` |
| `invites()->prune(), members()->prune(), joinRequests()->expire()` | `assertInvitesPruned(), assertMembersPruned(), assertJoinRequestsExpired()` | `assertNothingPruned()` |
| čokoľvek | `recorded(?TeamOperation)` | `assertNothingRecorded()` |

```php
use RoundlyConsulting\Teams\Enums\TeamOperation;
use RoundlyConsulting\Teams\Facades\Teams;

// Teams
Teams::assertTeamCreated('Acme');                    // name optional
Teams::assertOwnershipTransferred($team, to: $alice);
Teams::assertNothingCreated();
Teams::assertNothingTransferred();

// Members
Teams::assertMemberAdded($team, $alice, 'admin');    // role optional
Teams::assertMemberNotAdded($team, $carol);
Teams::assertMemberRemoved($team, $bob);
Teams::assertRoleChanged($team, $alice, 'editor');   // role optional
Teams::assertExpiringMembersNotified();
Teams::assertNothingAdded();
Teams::assertNothingRemoved();
Teams::assertNoRoleChanged();
Teams::assertNothingNotified();

// Invites
Teams::assertInviteCreated($team, 'jane@acme.test'); // email optional
Teams::assertInviteResent($invite);
Teams::assertInviteRevoked($invite);
Teams::assertInviteAccepted($invite, by: $user);     // both optional
Teams::assertNothingInvited();
Teams::assertNothingResent();
Teams::assertNothingRevoked();
Teams::assertNothingAccepted();

// Join requests and per-team roles
Teams::assertJoinRequested($team, $user);            // requester optional
Teams::assertJoinRequestApproved($request, by: $admin);
Teams::assertJoinRequestDenied($request, by: $admin);
Teams::assertRoleDefined($team, 'editor');           // key optional
Teams::assertNothingRequested();
Teams::assertNothingApproved();
Teams::assertNothingDenied();
Teams::assertNothingDefined();

// Housekeeping
Teams::assertInvitesPruned();
Teams::assertMembersPruned();
Teams::assertJoinRequestsExpired();
Teams::assertNothingPruned();

// Anything
Teams::recorded();                                   // list<RecordedTeamOperation>
Teams::recorded(TeamOperation::AddMember);           // only one operation
Teams::assertNothingRecorded();
```

## Zaznamenané operácie

recorded() vracia objekty RecordedTeamOperation — operáciu, kontext volania a jeho výsledok — s pomocníkmi na čítanie kontextu (kľúče ako team, member, role, invite, email, requester, request, by a key):

```php
use RoundlyConsulting\Teams\Enums\TeamOperation;

$op = Teams::recorded(TeamOperation::AddMember)[0];

$op->operation;                  // TeamOperation::AddMember
$op->result;                     // the Member the call returned
$op->model('member');            // ?Model from the call's context
$op->involves('team', $team);    // bool
$op->string('role');             // ?string — 'admin'
```

## Pest matchery

Tri expectation matchery zaregistrujete v tests/Pest.php — zavolajte TeamExpectations::register() alebo pripojte súbor publikovaný cez teams-stubs:

```php
// tests/Pest.php
use RoundlyConsulting\Teams\Testing\TeamExpectations;

TeamExpectations::register();

// or, after publishing teams-stubs:
require __DIR__.'/Teams.php';
```

```php
expect($user)
    ->toBeMemberOf($team)
    ->withRole($team, 'admin')
    ->toHaveTeamPermission($team, 'posts.publish');
```

## Factories

Každý model má factory so stavmi pre prípady životného cyklu:

```php
use RoundlyConsulting\Teams\Models\Invite;
use RoundlyConsulting\Teams\Models\JoinRequest;
use RoundlyConsulting\Teams\Models\Member;
use RoundlyConsulting\Teams\Models\Team;

Team::factory()->create();
Member::factory()->expired()->create();
Member::factory()->expiringAt(now()->addDays(5))->create();
Invite::factory()->maxUses(5)->forEmail('jane@example.com')->create();
Invite::factory()->expired()->create();
JoinRequest::factory()->expiringWithin(3)->create();
JoinRequest::factory()->expired()->create();
```

Factories členov a žiadostí vypĺňajú morph stĺpce zástupnými hodnotami — ak potrebujete skutočný model, zadajte member\_type a member\_id (alebo requester\_type a requester\_id).

## Testy samotného balíka

```bash
composer test
```

## 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/teams-for-laravel.md)
