---
title: "Matica databázových driverov — Testing for Laravel | Roundly"
description: "Spúšťajte testy na SQLite, Postgrese či MySQL podľa premenných TESTING_DB_*, s izolovanými sondami a hotovou CI vetvou."
url: https://roundly-consulting.com/sk/open-source/navody/testing-for-laravel/matica-driverov
language: sk
---

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

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

# Matica databázových driverov

DriverMatrix spúšťa testovaciu sadu naprieč databázovými drivermi, aby beh len na SQLite neprehliadol, v čom sa enginy líšia — napríklad LIKE bez ESCAPE je na Postgrese zelený, no na SQLite vráti nula riadkov.

```php
use RoundlyConsulting\Testing\Database\DriverMatrix;

// Only in a TestCase that does NOT extend PackageTestCase (which calls it for you):
protected function defineEnvironment($app): void
{
    DriverMatrix::configure($app);
}

// Skip a driver-specific case visibly on the wrong leg:
it('uses jsonb')->skip(fn () => DriverMatrix::driver() !== 'pgsql');
```

PackageTestCase volá DriverMatrix::configure() za vás. configure() nasmeruje predvolené pripojenie testing na TESTING\_DB\_DRIVER (predvolene SQLite v pamäti so zapnutými cudzími kľúčmi) a zaregistruje pgsql a mysql ako pomenované pripojenia — mimo príslušnej vetvy existujú, no sú nedostupné, takže podmienená asercia sa viditeľne preskočí namiesto toho, aby sa nikdy nespustila.

TESTING\_DB\_DRIVER musí byť sqlite, pgsql, mysql alebo mariadb. Čokoľvek iné — postgres, sqlsrv — vyhodí InvalidArgumentException namiesto toho, aby vetva potichu bežala na SQLite a každý test podmienený enginom sa zeleno preskočil.

## Premenné prostredia

| Premenná | Predvolené | Účel |
| --- | --- | --- |
| `TESTING_DB_DRIVER` | sqlite | Driver vetvy: sqlite, pgsql, mysql alebo mariadb — čokoľvek iné vyhodí InvalidArgumentException. Jediná premenná, ktorá presunie sadu mimo SQLite. |
| `TESTING_DB_HOST` | 127.0.0.1 | Hostiteľ enginu. |
| `TESTING_DB_PORT` | 5432 / 3306 | Port enginu (predvolený pre Postgres / MySQL). |
| `TESTING_DB_DATABASE` | testing | Názov databázy. |
| `TESTING_DB_USERNAME` | testing / root | Používateľ (predvolený pre Postgres / MySQL). |
| `TESTING_DB_PASSWORD` | '' | Heslo. |

CI vetva musí exportovať TESTING\_DB\_DRIVER. Premenné umiestnenia hovoria len o tom, kde engine je; ak ich exportujete bez drivera, celá sada zostane na SQLite — „pgsql“ úloha, ktorá sa Postgresu ani nedotkne. Umiestnenie platí len pre driver danej vetvy, takže pripojenia mimo nej použijú predvolené hodnoty a zlyhajú rýchlo, namiesto čakania na nesprávny engine. Na SQLite vetve opisuje umiestnenie len sondu pre Postgres — službu Postgres bežiacu popri SQLite vetve; na MySQL sa dostanete len cez MySQL vetvu s TESTING\_DB\_DRIVER=mysql.

## Lokálny beh proti Postgresu

```bash
TESTING_DB_DRIVER=pgsql \
TESTING_DB_HOST=127.0.0.1 TESTING_DB_PORT=5432 \
TESTING_DB_DATABASE=testing TESTING_DB_USERNAME=testing TESTING_DB_PASSWORD=secret \
vendor/bin/pest
```

## CI vetva pre Postgres

Vlastná vetva balíka dnes spúšťa Postgres cez docker run na tmpfs s vypnutou trvanlivosťou zápisu — pozrite CI pre vetvy s reálnou databázou v časti Základný test case pre balíky. Poslúži aj vetva GitHub Actions so servisným kontajnerom Postgresu, pripravená na prevzatie:

```yaml
test-pgsql:
  runs-on: ubuntu-latest
  name: P8.4 - pgsql real-engine

  services:
    postgres:
      image: postgres:16
      env:
        POSTGRES_DB: testing
        POSTGRES_USER: testing
        POSTGRES_PASSWORD: secret
      ports:
        - 5432:5432
      options: >-
        --health-cmd pg_isready
        --health-interval 10s
        --health-timeout 5s
        --health-retries 5

  steps:
    - uses: actions/checkout@v7
    - uses: shivammathur/setup-php@v2
      with:
        php-version: 8.4
        extensions: pdo, sqlite, pdo_sqlite, pgsql, pdo_pgsql
    - run: composer update --prefer-stable --prefer-dist --no-interaction
    - name: Execute tests against postgres
      env:
        # TESTING_DB_DRIVER is what moves the suite off sqlite.
        TESTING_DB_DRIVER: pgsql
        TESTING_DB_HOST: 127.0.0.1
        TESTING_DB_PORT: 5432
        TESTING_DB_DATABASE: testing
        TESTING_DB_USERNAME: testing
        TESTING_DB_PASSWORD: secret
      run: vendor/bin/pest --ci
```

## Izolované sondy

Pripojenia pgsql a mysql, ktoré configure() zaregistruje, sú izolované sondy: na Postgrese je ich search\_path vyhradená schéma testing\_probe, na MySQL vyhradená databáza testing\_probe, obe vytvorené podľa potreby. Spúšťač migrácií na reálnej databáze svoj cieľ čistí a táto izolácia štrukturálne vylučuje, aby beh sondy zmazal tabuľky bežiacej sady.

## Paralelné behy

Pri pest --parallel má každý worker token (ParallelTesting::token(), TEST\_TOKEN z paratestu). Databáza sady na reálnom engine sa zmení na <database>\_<token> — vytvorí sa pri prvom použití cez zdieľanú databázu — a menný priestor sondy na testing\_probe\_<token>, takže čistenie jedného workera ani mazanie v jeho sonde sa k inému workeru nikdy nedostane. SQLite :memory: je už samo osebe oddelené pre každý proces; bez tokenu sa nič nemení.

## API

| Metóda | Účel |
| --- | --- |
| `DriverMatrix::configure($app)` | Nasmeruje pripojenie testing na driver matice a zaregistruje sondy pgsql/mysql. |
| `DriverMatrix::driver()` | Aktívny driver — TESTING\_DB\_DRIVER, predvolene sqlite; neznáma hodnota vyhodí výnimku. Použite ho v podmienkach ->skip(). |
| `DriverMatrix::connectionConfig(?string $driver = null)` | Výsledná konfigurácia pripojenia pre aktívny (alebo zadaný) driver — na registráciu pod iným názvom či na overenie. |
| `DriverMatrix::probeConnectionConfig(string $driver)` | Tá istá konfigurácia obmedzená na menný priestor sondy — testing\_probe, pri --parallel pre každý worker zvlášť. |
| `DriverMatrix::prepareProbe(string $connection)` | Vytvorí menný priestor sondy, ak chýba; pre pripojenie, ktoré nie je izolovanou sondou, nerobí nič. |
| `DriverMatrix::isProbe(string $connection)` | Či je nakonfigurované pripojenie izolovanou sondou — to spúšťač na reálnej databáze vyžaduje od cieľa, ktorý nie je SQLite. |
| `DriverMatrix::probeNamespace()` | testing\_probe, pri --parallel doplnený o token workera. |

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