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_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.
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/pestCI 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 --ciIzolované 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 kryptomienOdoslaní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.