---
title: "Testovanie — Reviews for Laravel | Roundly"
description: "Reviews::fake() zaznamená každú zmenu z akejkoľvek cesty a pritom ju vykoná — desať asercií, Pest matchery, trait pre testy a továrne."
url: https://roundly-consulting.com/sk/open-source/navody/reviews-for-laravel/testovanie
language: sk
---

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

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

# Testovanie

Reviews::fake() nasadí zaznamenávajúci ReviewsFake — podtyp ReviewsManager, takže ho dostane aj injektovaný manažér — a vráti ho. Operácie naďalej bežia proti databáze, takže čítania, agregáty aj udalosti sa správajú normálne, a každá zmena sa zaznamená — či prišla cez fasádu, injektovaný manažér, builder for()->by(), traity HasReviews / CanVoteOnReviews alebo metódu modelu Review:

```php
use RoundlyConsulting\Reviews\Facades\Reviews;
use RoundlyConsulting\Reviews\Models\Review;

it('records the review and the owner reply', function () {
    $fake = Reviews::fake();

    $restaurant = Restaurant::factory()->create();
    [$user, $owner] = User::factory()->count(2)->create();

    $review = $restaurant->addReview($user)->rating(5)->create();
    $review->respond($owner, 'Thanks!');

    $fake->assertReviewCreated();
    $fake->assertReviewCreated(fn (Review $review) => $review->rating === 5);
    $fake->assertReviewResponded(fn (Review $response, Review $parent) => $parent->is($review));
    $fake->assertNothingApproved();
});
```

## Všetky asercie

| Asercia | Opak | Callback dostane |
| --- | --- | --- |
| `assertReviewCreated()` | `assertNothingReviewed()` | recenzia |
| `assertReviewApproved()` | `assertNothingApproved()` | recenzia |
| `assertReviewRejected()` | `assertNothingRejected()` | recenzia |
| `assertReviewUpdated()` | `assertNothingUpdated()` | recenzia |
| `assertReviewDeleted()` | `assertNothingDeleted()` | recenzia |
| `assertReviewResponded()` | `assertNothingResponded()` | odpoveď, pôvodná recenzia |
| `assertReviewVoted()` | `assertNothingVoted()` | recenzia, hlasujúci |
| `assertReviewVoteRemoved()` | `assertNoVoteRemoved()` | recenzia, hlasujúci |
| `assertReviewVerified()` | `assertNothingVerified()` | recenzia |
| `assertReviewUnverified()` | `assertNothingUnverified()` | recenzia |

```php
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Reviews\Models\Review;

$fake->assertReviewCreated(fn (Review $review) => $review->verified);
$fake->assertReviewApproved(fn (Review $review) => $review->is($pending));
$fake->assertReviewRejected();
$fake->assertReviewUpdated();
$fake->assertReviewDeleted();
$fake->assertReviewResponded(fn (Review $response, Review $parent) => $parent->is($review));
$fake->assertReviewVoted(fn (Review $review, Model $voter) => $voter->is($user));
$fake->assertReviewVoteRemoved(fn (Review $review, Model $voter) => $voter->is($user));
$fake->assertReviewVerified();
$fake->assertReviewUnverified();

// The opposites pass when nothing of that kind was recorded:
$fake->assertNothingReviewed();
$fake->assertNothingApproved();
$fake->assertNothingRejected();
$fake->assertNothingUpdated();
$fake->assertNothingDeleted();
$fake->assertNothingResponded();
$fake->assertNothingVoted();
$fake->assertNoVoteRemoved();
$fake->assertNothingVerified();
$fake->assertNothingUnverified();
```

Každá metóda assert\*() prijíma voliteľný callback a prejde, ak aspoň jedno zaznamenané volanie vráti true. Zaznamenajú sa len volania, ktoré niečo zmenia: schválenie schválenej recenzie, zamietnutie zamietnutej, overenie overenej (či zrušenie overenia neoverenej) a stiahnutie hlasu, ktorý nikdy nevznikol, sú bez účinku — bez zápisu a bez udalosti — preto sa nezaznamenajú. Volanie update(), ktoré zmení príznak verified, sa zaznamená aj ako overenie alebo zrušenie overenia. Keďže operácie skutočne bežia, majte načítané migrácie balíka (RefreshDatabase).

## Pest expectations

Matchery zaregistrujte raz v tests/Pest.php:

```php
// tests/Pest.php
RoundlyConsulting\Reviews\Testing\ReviewExpectations::register();

// In any test:
expect($product)->toHaveReview();
expect($product)->toHaveReview($author);
expect($product)->toHaveApprovedReview();
```

Oba matchery sledujú len recenzie najvyššej úrovne, odpovede vlastníka ich teda nikdy nesplnia.

## InteractsWithReviews

Pridajte trait do testovacieho prípadu a získate pohodlné actingAsReviewer() / reviewAs():

```php
use RoundlyConsulting\Reviews\Testing\InteractsWithReviews;

uses(InteractsWithReviews::class);

it('queues a new review for moderation', function () {
    $review = $this->actingAsReviewer(User::factory()->create())
        ->reviewAs(Restaurant::factory()->create(), rating: 4, content: 'Great brunch');

    expect($review->isPending())->toBeTrue();
});
```

## Továrne

Oba modely majú továrne so stavmi pre každý typ recenzie. Vytvárajú nakonfigurovaný reviews.model / reviews.vote\_model, takže vymenený model dostane vlastné riadky:

```php
use RoundlyConsulting\Reviews\Models\Review;
use RoundlyConsulting\Reviews\Models\ReviewVote;

$review = Review::factory()
    ->forReviewable($restaurant)
    ->byAuthor($user)
    ->approved()
    ->verified()
    ->rating(5)
    ->create();

Review::factory()->response($review)->byAuthor($owner)->approved()->create();
Review::factory()->forReviewable($restaurant)->withoutRating()->pending()->create();
Review::factory()->forReviewable($restaurant)->helpfulVotes(12, 3)->create();

ReviewVote::factory()->forReview($review)->byVoter($user)->unhelpful()->create();
```

Továrne zapisujú riadky priamo — obchádzajú validáciu, moderovanie aj udalosti. Ak testované správanie od nich závisí, použite fasádu.

## Vlastné testy 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/reviews-for-laravel.md)
