Test unitari PostgreSQL con pgTAP

Impara come implementare test di database completi in Supabase utilizzando pgTAP per test unitari PostgreSQL robusti.

Cos'è pgTAP?

pgTAP è un framework di test unitari per PostgreSQL che fornisce un set completo di funzioni per testare oggetti di database, inclusi tabelle, funzioni, trigger, viste e altro ancora. Segue lo standard TAP (Test Anything Protocol), rendendolo compatibile con vari test runner e sistemi CI/CD.

Perché abbiamo bisogno di test di database?

I test di database sono spesso trascurati nello sviluppo di applicazioni moderne, ma sono cruciali per garantire l'integrità dei dati, la correttezza della logica di business e l'affidabilità del sistema. Mentre i test a livello di applicazione sono importanti nello sviluppo software classico, non si applicano nel contesto di Supabase.

Vantaggi dell'uso di pgTAP

  • I test a livello di database garantiscono l'integrità dei dati e la validazione dei vincoli
  • Copertura completa di oggetti e funzionalità PostgreSQL
  • Integrazione perfetta con le pipeline CI/CD esistenti
  • Capacità di test delle prestazioni per le operazioni di database

Scrivere test con pgTAP

pgTAP fornisce una vasta gamma di funzioni di test. Ecco alcuni pattern comuni per testare diversi oggetti di database:

Testare le funzioni di database

Le funzioni sono uno degli oggetti più comuni da testare. Ecco come testare l'esistenza delle funzioni, i valori di ritorno e la gestione degli errori:

-- Example: Testing a user creation function
BEGIN;
SELECT plan(3);

-- Test function exists
SELECT has_function('create_user', ARRAY['text', 'text', 'text']);

-- Test function returns expected result
SELECT results_eq(
  'SELECT create_user(''john@example.com'', ''John'', ''Doe'')',
  'SELECT 1',
  'create_user should return 1 on success'
);

-- Test function handles invalid input
SELECT throws_ok(
  'SELECT create_user('''', ''John'', ''Doe'')',
  'Invalid email address',
  'create_user should throw error for empty email'
);

SELECT * FROM finish();
ROLLBACK;

Testare tabelle e vincoli

Assicurati che le tue tabelle abbiano la struttura e i vincoli corretti:

-- Example: Testing table structure and constraints
BEGIN;
SELECT plan(6);

-- Test table exists
SELECT has_table('users');

-- Test required columns exist
SELECT has_column('users', 'id');
SELECT has_column('users', 'email');
SELECT has_column('users', 'created_at');

-- Test if the table has a primary key constraint
SELECT has_pk('users');

-- Test unique constraint on email
SELECT has_unique('users', ARRAY['email']);

SELECT * FROM finish();
ROLLBACK;

Testare i trigger

Verifica che i trigger siano correttamente collegati e funzionanti:

-- Example: Testing triggers
BEGIN;
SELECT plan(2);

-- Test trigger exists
SELECT trigger_is('users', 'update_updated_at', 'users', 'update_updated_at()');

-- Test trigger function
SELECT has_function('update_updated_at');

SELECT * FROM finish();
ROLLBACK;

Migliori pratiche

  • Usa le transazioni per garantire l'isolamento dei test e annullare le modifiche
  • Organizza i test per tipo di oggetto di database e funzionalità
  • Usa nomi di test descrittivi che indicano chiaramente cosa viene testato
  • Mira a una copertura completa di tutti gli oggetti di database e casi limite
  • Includi test delle prestazioni per le operazioni critiche del database

Integrazione CI/CD

Integra i test pgTAP nella tua pipeline CI/CD per garantire la qualità del database. Con Supabase, i tuoi test dovrebbero essere posizionati nella directory `supabase/tests`:

Nota: Con Supabase, i tuoi test di database dovrebbero essere posizionati nella directory supabase/tests.
# .github/workflows/test-database.yml
name: Database Tests and Production Deployment

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  test:
    name: Run Database Tests
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: supabase/setup-cli@v1
        with:
          version: latest
      - run: supabase db start
      - run: supabase test db

Risoluzione dei problemi

Problemi comuni e soluzioni quando si lavora con pgTAP:

Problemi comuni

  • Errori di permessi - assicurati delle appropriate permessi di database per l'esecuzione dei test
  • Gestione delle transazioni - avvolgi sempre i test in transazioni per l'isolamento

Conclusione

pgTAP fornisce un modo potente e flessibile per testare i database PostgreSQL in Supabase. Implementando test di database completi, puoi garantire l'integrità dei dati, rilevare problemi presto e mantenere applicazioni di alta qualità.

Prossimi passi

  • Esplora la documentazione completa pgTAP e le funzioni di test disponibili
  • Integra i test pgTAP nei tuoi progetti Supabase esistenti
  • Condividi i tuoi pattern di test e migliori pratiche con la community
  • Migliora continuamente la tua copertura di test e strategie di test

Pronto a Creare lei Applicazioni?

Il nostro team di esperti Supabase svizzeri può aiutarti a progettare e implementare schemi di database type-safe per il tuo prossimo progetto. Dalla progettazione iniziale dello schema allo sviluppo completo dell'applicazione, abbiamo tutto coperto.

Ottieni Consulenza Esperta
llms.txt
HeapSoft – Supabase e test unitari PostgreSQL con pgTAP