Configuration et optimisation de la couverture de test pour vanilla-extract

Gestion automatisée de la qualité des styles

Dans les projets modernes, l'absence de tests sur le CSS génère des bugs silencieux difficiles à diagnostiquer. Vanilla-extract, qui transforme les feuilles de style TypeScript sans temps d'exécution, introduit un paradigme où la sécurité des types se conjugue avec l'analyse statique. Pour garantir la fiabilité de ces styles générés, l'utilisation d'outils de mesure de couverture est cruciale afin d'évaluer l'étendue des règles testées.

Architecture de la pile de test

L'écosystème s'appuie principalement sur les frameworks Jest et Vitest. L'intégration se fait via le plugin @vanilla-extract/jest-transform, qui permet au processeur de compilation de traiter les fichiers CSS pendant l'exécution des tests unitaires. Dans le fichier de configuration des scripts npm ou pnpm, il convient d'inclure les commandes appropriées :

{
  "scripts": {
    "verify-styles": "pnpm test:runner && pnpm analyze:coverage",
    "analyze:coverage": "cross-env NODE_ENV=test vitest run --reporter=verbose",
    "test:runner": "NODE_OPTIONS=--experimental-vm-modules jest --passWithNoTests"
  }
}

Cette structure assure que chaque modification déclenche à la fois l'exécution des scénarios et la collecte des métriques nécessaires.

Métriques clés de couverture

La vérification ne se limite pas au simple comptage des lignes. Plsuieurs dimensions doivent être surveillées :

  • Branchement logique : Vérifie si les conditions conditionnelles (comme les media queries ou les variantes de thème) sont toutes passées au crible.
  • Déclarations de style : Mesure le taux d'exécution des définitions de propriétés spécifiques.
  • Fonctions utilitaires : Indique si les méthodes créant les règles (telles que celles des sprinks) sont invocations correctement.
  • Lignes actives : Donne une vue d'ensemble granulaire sur le code exécuté par rapport au total disponible.

Ces indicateurs peuvent être visualisés via des rapports HTML standards produits par les moteurs de test sous-jacents.

Analyse de cas concrets : Systèmes atomiques

Pour valider le système atomique (Sprinkles), il est nécessaire de tester chaque propriété définie. Prenons l'exemple de la gestion des tailles d'espacement. Voici comment structurer un test valide avec des assertions précises :

import { createSprinkles } from './styles';
import { spacingSystem } from './config';

describe('Système de Spacing', () => {
  test('doit gérer les valeurs responsive dynamiques', () => {
    const instance = createSprinkles(spacingSystem);

    expect(
      instance({
        paddingX: ['10px', '20px', '30px'],
      }),
    ).toMatchInlineSnapshot(
      `"sp_10px__a1b2c3 sp_20px__d4e5f6 sp_30px__g7h8i9"`
    );
  });
});

Cet exemple démontre la capacité du système à générer des classes CSS uniques basées sur des chaînes de caractères d'entrée. Si un développeur constate une lacune dans la branche mobile/tablet/desktop durant l'exécution précédente, l'ajout de ce cas couvre les angles morts restants.

Ajustement de la configuration et pipeline CI

Il est recommandé de définir des seuils minimums d'acceptation directement dans le fichier de configuration pour rejeter automatiquement les Pull Requests insuffisantes. Voici un aperçu de la configuration jest.config.js :

module.exports = {
  collectCoverageFrom: [
    'src/**/*.ts',
    '!src/**/*.d.ts',
  ],
  coverageReporters: ['text-summary', 'lcov'],
  coverageThreshold: {
    global: {
      lines: 85,
      branches: 80,
      functions: 85,
      statements: 88,
    },
  },
};

Pour sécuriser l'intégration continue, étape CI/CD suivante est typiquement configurée dans GitHub Actions :

jobs:
  test-suite:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Exécution avec rapport
        run: pnpm verify-styles --coverage
      
      - name: Génération du badge de couverture
        uses: codecov/codecov-action@v3.1.0
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          file: ./coverage/lcov.info
          flags: ui-tests

Cette automatisation garantit que la santé du code reste prioritaire lors des déploiements quotidiens, sans intervention manuelle pour inspecter les rapports de test.

Étiquettes: vanilla-extract code-coverage jest Vitest type-safe-css

Publié le 11 août à 10h48