feature-flags

Par facebook · react

À utiliser lorsque des tests de feature flag échouent, que des flags doivent être mis à jour, pour comprendre les pragmas `@gate`, déboguer des échecs de tests spécifiques à un canal, ou ajouter de nouveaux flags à React.

npx skills add https://github.com/facebook/react --skill feature-flags

Drapeaux de fonctionnalités React

Fichiers de drapeaux

Fichier Objectif
packages/shared/ReactFeatureFlags.js Drapeaux par défaut (canary), surcharges __EXPERIMENTAL__
packages/shared/forks/ReactFeatureFlags.www.js Canal www, surcharges __VARIANT__
packages/shared/forks/ReactFeatureFlags.native-fb.js React Native, surcharges __VARIANT__
packages/shared/forks/ReactFeatureFlags.test-renderer.js Moteur de test

Tests avec contrôle d'accès

Pragma @gate (au niveau du test)

À utiliser quand la fonctionnalité est complètement indisponible sans le drapeau :

// @gate enableViewTransition
it('supports view transitions', () => {
  // Ce test s'exécute uniquement quand enableViewTransition est true
  // et est IGNORÉ (non échoué) quand false
});

gate() en ligne (au niveau de l'assertion)

À utiliser quand la fonctionnalité existe mais le comportement diffère selon le drapeau :

it('renders component', async () => {
  await act(() => root.render(<App />));

  if (gate(flags => flags.enableNewBehavior)) {
    expect(container.textContent).toBe('new output');
  } else {
    expect(container.textContent).toBe('legacy output');
  }
});

Ajouter un nouveau drapeau

  1. Ajouter à ReactFeatureFlags.js avec une valeur par défaut
  2. Ajouter à chaque fichier fork (*.www.js, *.native-fb.js, etc.)
  3. S'il doit varier entre www et RN, définir à __VARIANT__ dans le fichier fork
  4. Contrôler les tests avec @gate nomDrapeau ou inline gate()

Vérifier les états des drapeaux

Utiliser /flags pour consulter les états sur tous les canaux. Consulter la skill flags pour les options de commande complètes.

Drapeaux __VARIANT__ (GKs)

Les drapeaux définis à __VARIANT__ simulent des gardiens d'accès - testés deux fois (true et false) :

/test www <pattern>              # __VARIANT__ = true
/test www variant false <pattern> # __VARIANT__ = false

Déboguer les défaillances spécifiques à un canal

  1. Exécuter /flags --diff <canal1> <canal2> pour comparer les valeurs
  2. Vérifier les conditions @gate - le test peut être contrôlé pour des canaux spécifiques
  3. Exécuter /test <canal> <pattern> pour isoler la défaillance
  4. Vérifier que le drapeau existe dans tous les fichiers fork s'il vient d'être ajouté

Erreurs courantes

  • Oublier les deux variantes - Toujours tester www ET www variant false pour les drapeaux __VARIANT__
  • Utiliser @gate pour les différences de comportement - Utiliser gate() en ligne si les deux chemins doivent s'exécuter
  • Fichiers fork manquants - Les nouveaux drapeaux doivent être ajoutés à TOUS les fichiers fork, pas seulement au principal
  • Syntaxe gate incorrecte - C'est gate(flags => flags.name), pas gate('name')

Skills similaires