---
title: "Testovanie — Sluggable for Laravel | Roundly"
description: "Testujte generovanie slugov, eventy, presmerovania z histórie aj regenerovanie vo fronte vo vlastnej Pest sade cez verejné API."
url: https://roundly-consulting.com/sk/open-source/navody/sluggable-for-laravel/testovanie
language: sk
---

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

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

# Testovanie

Slugy sa generujú v bežných eventoch modelu, takže feature testy nepotrebujú žiadnu špeciálnu prípravu — vytvorte modely a overujte cez verejné API:

```php
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Sluggable\Enums\ChangeReason;
use RoundlyConsulting\Sluggable\Events\SlugChanged;

it('generates unique slugs from the name', function () {
    expect(Clinic::create(['name' => 'Happy Paws'])->slug)->toBe('happy-paws');
    expect(Clinic::create(['name' => 'Happy Paws'])->slug)->toBe('happy-paws-2');
});

it('announces a manual slug change', function () {
    Event::fake([SlugChanged::class]);

    $clinic = Clinic::create(['name' => 'Happy Paws']);
    $clinic->update(['slug' => 'happy-paws-vienna']);

    Event::assertDispatched(SlugChanged::class, fn (SlugChanged $event): bool =>
        $event->current === 'happy-paws-vienna' && $event->reason === ChangeReason::Manual);
});

it('redirects a retired slug to the current one', function () {
    // Product: ->regenerateOnUpdate()->keepHistory()->routeKey(); Route::get('/products/{product}', …)
    $product = Product::create(['name' => 'Classic Chair']);
    $product->update(['name' => 'Heritage Chair']);

    $this->get('/products/classic-chair')->assertStatus(301)->assertRedirect('/products/heritage-chair');
});
```

- Veľké factories, pri ktorých na slugu nezáleží, spúšťajte vnútri Slugs::withoutGeneration() — vynechá generovanie, eventy aj históriu.
- Testy histórie potrebujú publikované sluggable-migrations v adresári migrácií, aby RefreshDatabase vytvoril tabuľku slug\_history.
- Slugs::generate($model) vám vráti hodnotu, ktorú by model dostal, bez toho, aby sa čokoľvek uložilo.

## Regenerovanie vo fronte

Slugs::fake() neexistuje: generovanie je deterministické a beží nad vašou vlastnou databázou, preto overujte uložené riadky. Pri queueRegeneration() použite Bus::fake() z Laravelu a overte odoslanie RegenerateSlugsJob:

```php
use Illuminate\Support\Facades\Bus;
use RoundlyConsulting\Sluggable\Enums\RegenerationMode;
use RoundlyConsulting\Sluggable\Facades\Slugs;
use RoundlyConsulting\Sluggable\Jobs\RegenerateSlugsJob;

it('queues a full regeneration', function () {
    Product::create(['name' => 'Classic Chair']);
    Bus::fake();

    Slugs::model(Product::class)->queueRegeneration(mode: RegenerationMode::All);

    Bus::assertDispatched(RegenerateSlugsJob::class);
});
```

## Vlastná testovacia sada balíka

```bash
composer test            # Pest
composer test-coverage   # Pest with a 90 % coverage floor
composer analyse         # Larastan level 7
```

Pest sada beží na SQLite, PostgreSQL aj MySQL vrátane reálnych súbežných zápisov a testov presmerovaní na úrovni HTTP.

## Statická analýza

Balík obsahuje rozšírenie pre PHPStan (extension.neon, automaticky zahrnuté cez phpstan/extension-installer), vďaka ktorému Larastan pozná $table->slug(), $table->localizedSlug(), $table->uniqueSlug(), Rule::uniqueSlug() a Rule::validSlug().

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