Tests unitaires PostgreSQL avec pgTAP

Apprenez à implémenter des tests de base de données complets dans Supabase en utilisant pgTAP pour des tests unitaires PostgreSQL robustes.

Qu'est-ce que pgTAP ?

pgTAP est un framework de tests unitaires pour PostgreSQL qui fournit un ensemble complet de fonctions pour tester les objets de base de données, y compris les tables, fonctions, déclencheurs, vues et plus encore. Il suit la norme TAP (Test Anything Protocol), le rendant compatible avec divers exécuteurs de tests et systèmes CI/CD.

Pourquoi avons-nous besoin de tests de base de données ?

Les tests de base de données sont souvent négligés dans le développement d'applications modernes, mais ils sont cruciaux pour assurer l'intégrité des données, la justesse de la logique métier et la fiabilité du système. Bien que les tests au niveau de l'application soient importants dans le développement logiciel classique, ils ne s'appliquent pas dans le contexte de Supabase.

Avantages de l'utilisation de pgTAP

  • Les tests au niveau de la base de données assurent l'intégrité des données et la validation des contraintes
  • Couverture complète des objets et fonctionnalités PostgreSQL
  • Intégration transparente avec les pipelines CI/CD existants
  • Capacités de test de performance pour les opérations de base de données

Écrire des tests avec pgTAP

pgTAP fournit une large gamme de fonctions de test. Voici quelques modèles courants pour tester différents objets de base de données :

Tester les fonctions de base de données

Les fonctions sont l'un des objets les plus courants à tester. Voici comment tester l'existence des fonctions, les valeurs de retour et la gestion des erreurs :

-- 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;

Tester les tables et contraintes

Assurez-vous que vos tables ont la structure et les contraintes correctes :

-- 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;

Tester les déclencheurs

Vérifiez que les déclencheurs sont correctement attachés et fonctionnent :

-- 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;

Meilleures pratiques

  • Utilisez des transactions pour assurer l'isolation des tests et annuler les changements
  • Organisez les tests par type d'objet de base de données et fonctionnalité
  • Utilisez des noms de test descriptifs qui indiquent clairement ce qui est testé
  • Visez une couverture complète de tous les objets de base de données et cas limites
  • Incluez des tests de performance pour les opérations critiques de base de données

Intégration CI/CD

Intégrez les tests pgTAP dans votre pipeline CI/CD pour assurer la qualité de la base de données. Avec Supabase, vos tests doivent être situés dans le répertoire `supabase/tests` :

Note : Avec Supabase, vos tests de base de données doivent être situés dans le répertoire 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

Dépannage

Problèmes courants et solutions lors du travail avec pgTAP :

Problèmes courants

  • Erreurs de permissions - assurez-vous des permissions de base de données appropriées pour l'exécution des tests
  • Gestion des transactions - enveloppez toujours les tests dans des transactions pour l'isolation

Conclusion

pgTAP fournit un moyen puissant et flexible de tester les bases de données PostgreSQL dans Supabase. En implémentant des tests de base de données complets, vous pouvez assurer l'intégrité des données, détecter les problèmes tôt et maintenir des applications de haute qualité.

Prochaines étapes

  • Explorez la documentation complète pgTAP et les fonctions de test disponibles
  • Intégrez les tests pgTAP dans vos projets Supabase existants
  • Partagez vos modèles de test et meilleures pratiques avec la communauté
  • Améliorez continuellement votre couverture de test et vos stratégies de test

Prêt à Créer votre Applications?

Notre équipe d'experts Supabase suisses peut vous aider à concevoir et implémenter des schémas de base de données type-safe pour votre prochain projet. De la conception initiale du schéma au développement complet de l'application, nous avons tout couvert.

Obtenir une Consultation Expert
llms.txt
HeapSoft – Supabase et tests unitaires PostgreSQL avec pgTAP