---
title: "Testovanie — Geolocation for Laravel | Roundly"
description: "Geolocation::fake() zaznamená vyhľadávania, vzdialenosti, obnovy aj prácu s cache s pripravenými výsledkami — alebo nasimulujte HTTP a limiter."
url: https://roundly-consulting.com/sk/open-source/navody/geolocation-for-laravel/testovanie
language: sk
---

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

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

# Testovanie

Geolocation::fake() v testoch vašej aplikácie nahradí manažéra zaznamenávajúcim fakom a vráti ho. Iba zaznamenáva: nedotkne sa žiadneho poskytovateľa, siete, cache ani sťahovania MaxMind a vyhľadávania odpovedajú výsledkami, ktoré pripravíte. GeolocationFake rozširuje GeolocationManager a nahradí koreň fasády aj väzbu v kontajneri, takže ho používa fasáda, injektovaný manažér aj makro $request->location():

```php
use RoundlyConsulting\Geolocation\DataTransferObjects\Location;
use RoundlyConsulting\Geolocation\Enum\GeolocationType;
use RoundlyConsulting\Geolocation\Facades\Geolocation;

it('localises checkout from the visitor IP', function () {
    $fake = Geolocation::fake([
        '203.0.113.7' => new Location(
            humanReadable: 'Springfield, US',
            street: '',
            city: 'Springfield',
            countryIsoCode: 'US',
            latitude: 39.7817,
            longitude: -89.6501,
            type: GeolocationType::Ip,
        ),
    ]);

    $this->withServerVariables(['REMOTE_ADDR' => '203.0.113.7'])
        ->get('/checkout')
        ->assertOk();

    $fake->assertLocated('203.0.113.7');
});
```

## Príprava výsledkov a overenie vyhľadávaní

```php
$fake = Geolocation::fake();

$fake->seed('203.0.113.7', $location)          // an IP
    ->seed('Main Street 1, Springfield', $hq)  // an address
    ->seed('48.1486,17.1077', $point)          // coordinates as "lat,lng"
    ->seedDefault($fallback)                   // anything not seeded
    ->seedDistance($distance);                 // returned by every distance() call

// ...exercise your code, then:
$fake->assertLocated('203.0.113.7');
$fake->assertProviderUsed('ipinfo');      // pinned via provider() / using()
$fake->assertProviderNotUsed('google');

// Or, for a code path that must not look anything up:
$fake->assertNothingLocated();
```

## Vzdialenosti, obnovy a cache

```php
use RoundlyConsulting\Geolocation\DataTransferObjects\GeolocationQuery;
use RoundlyConsulting\Geolocation\Enum\DistanceType;

// Distances — through distance() or distanceBetween(); every argument is optional
$fake->assertDistanceRequested(from: $warehouse);
$fake->assertDistanceRequested($warehouse, $customer, DistanceType::Driving);
$fake->assertNoDistanceRequested();

// MaxMind refreshes — Geolocation::updateDatabase() and geolocation:db:update
$fake->assertDatabaseUpdated('GeoLite2-City');   // or no edition for any refresh
$fake->assertDatabaseNotUpdated();

// Cache maintenance
$fake->assertForgotten(GeolocationQuery::forIp('8.8.8.8'));
$fake->assertNothingForgotten();
$fake->assertCacheFlushed();
$fake->assertCacheNotFlushed();
```

updateDatabase() na fake zaznamená edíciu a vráti nastavenú cestu — a keďže ju volá aj geolocation:db:update, zaznamená sa aj spustenie príkazu v teste.

## Všetky metódy

| Metóda | Účel |
| --- | --- |
| `Geolocation::fake(array $results = [])` | Nahradí manažéra fakom; výsledky podľa IP, adresy alebo „lat,lng“. Poskytovatelia zaregistrovaní cez extend() zostanú zaregistrovaní. |
| `seed(string $key, Location $location)` | Pridá jeden pripravený výsledok (fluentne). |
| `seedDefault(?Location $location)` | Výsledok pre každé vyhľadávanie bez pripraveného kľúča. |
| `seedDistance(?Distance $distance)` | Vráti ho každé volanie distance(). |
| `assertLocated(string $key)` | Kľúč sa aspoň raz vyhľadával. |
| `assertNothingLocated()` | Neprebehlo žiadne vyhľadávanie. |
| `assertProviderUsed(string $name)` | Vyhľadávanie, dávka, vzdialenosť alebo matica bežali cez kópiu, ktorú pre toto meno vrátil provider() alebo using() — platí ktorékoľvek z pripnutých mien. |
| `assertProviderNotUsed(string $name)` | Žiadne volanie nebolo pripnuté na toto meno. |
| `assertDistanceRequested(?$from, ?$to, ?$type)` | Vzdialenosť sa vyžiadala cez distance() alebo distanceBetween(); každý argument zúži zhodu. |
| `assertNoDistanceRequested()` | Nevyžiadala sa žiadna vzdialenosť. |
| `assertDatabaseUpdated(?string $edition)` | Databáza MaxMind sa aktualizovala (pre danú edíciu) — nič sa nesťahuje. |
| `assertDatabaseNotUpdated()` | Databáza sa neaktualizovala. |
| `assertForgotten($query)` | forget() prebehol pre daný GeolocationQuery alebo DistanceQuery. |
| `assertNothingForgotten()` | forget() neprebehol ani raz. |
| `assertCacheFlushed()` | flushCache() prebehol aspoň raz. |
| `assertCacheNotFlushed()` | flushCache() neprebehol ani raz. |

Fake nespúšťa žiadneho poskytovateľa, takže assertProviderUsed() overuje mená, ktoré váš kód pripol cez provider() / using() pre vyhľadávanie, dávku, vzdialenosť alebo maticu — nie to, ktorý poskytovateľ „by bol odpovedal“. Rovnako ako skutočný manažér vracajú provider() a using() kópiu s obmedzeným rozsahom: pripnutie platí len pre volania zreťazené na nej (Geolocation::provider('ipinfo')->locateIp(…)), takže samostatné Geolocation::provider('ipinfo'); nezaznamená nič. Asercie zavoláte aj staticky na fasáde — Geolocation::assertLocated('8.8.8.8'). Vyhľadávania podľa súradníc majú kľúč „lat,lng“ v obyčajnom desatinnom zápise — „0.00001,0“, nikdy „1.0E-5,0“; Coordinates(1.0, 2.0) je 1,2. distanceMatrix() na fake vracia prázdnu mriežku a withToken() / withTimeout() / withConfig() nerobia nič.

Fake odmieta mená poskytovateľov presne ako skutočný manažér. withToken() / withConfig() hneď vyhodia UnknownProviderException pre meno, ktoré nie je v providers ani zaregistrované cez extend(), a vyhľadávanie, vzdialenosť alebo matica pripnuté na také meno ju vyhodia pri spustení (pripnuté batch() vráti pre každú IP null). Poskytovatelia zaregistrovaní cez extend() pred fake() — napríklad driver, ktorý pri štarte registruje iný balík — zostanú zaregistrovaní.

## Simulácia HTTP vrstvy

Ak chcete otestovať mapovanie odpovede skutočného poskytovateľa, pripnite pipeline a nasimulujte HTTP volanie:

```php
use Illuminate\Support\Facades\Http;

it('maps an IPinfo response onto a Location', function () {
    config()->set('geolocation.pipeline', ['ipinfo']);

    Http::fake([
        'ipinfo.io/*' => Http::response(['city' => 'Springfield', 'country' => 'US', 'loc' => '39.7817,-89.6501']),
    ]);

    expect(Geolocation::locateIp('203.0.113.7')?->city)->toBe('Springfield');
});
```

## Simulácia limitera

RateLimits::fake() z http-client-rate-limits-for-laravel zaznamenáva spomaľovanie bez skutočného čakania, takže overíte, že sa limit poskytovateľa uplatnil:

```php
use RoundlyConsulting\HttpClientRateLimits\Facades\RateLimits;

it('paces bulk lookups under the ipinfo budget', function () {
    config()->set('geolocation.pipeline', ['ipinfo']);
    config()->set('geolocation.services.ipinfo.rate_limits.limit', 1);

    $fake = RateLimits::fake();   // no real sleeping
    Http::fake(['ipinfo.io/*' => Http::response(['city' => 'X', 'country' => 'US', 'loc' => '1,2'])]);

    Geolocation::batch(['203.0.113.7', '198.51.100.4']);

    $fake->assertDeferred('geolocation:ipinfo:app');
});
```

Pracujete priamo na balíku? Jeho vlastné testy spustíte príkazom:

```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/geolocation-for-laravel.md)
