NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Testing for Laravel

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.

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_DRIVERsqliteDriver vetvy: sqlite, pgsql, mysql alebo mariadb — čokoľvek iné vyhodí InvalidArgumentException. Jediná premenná, ktorá presunie sadu mimo SQLite.
TESTING_DB_HOST127.0.0.1Hostiteľ enginu.
TESTING_DB_PORT5432 / 3306Port enginu (predvolený pre Postgres / MySQL).
TESTING_DB_DATABASEtestingNázov databázy.
TESTING_DB_USERNAMEtesting / rootPouží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.

Lokálny beh proti Postgresu

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á GitHub Actions úloha balíka, pripravená na prevzatie:

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.

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 testing_probe.
DriverMatrix::prepareProbe(string $connection)Vytvorí menný priestor sondy, ak chýba; pre pripojenie, ktoré nie je izolovanou sondou, nerobí nič.

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

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

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.