Quiz 5 — Qualité & écosystème (P14-P17)
20 questions · ~15 min — la dernière série !
1. Pourquoi tsc --noEmit est-il indispensable spécifiquement en RN ?
Réponse
Metro ne type-check pas (transpilation seule) : l’app tourne avec des erreurs de types. tsc est le seul contrôle — dans le rituel de release/pre-commit.
2. La doctrine des frontières en une formule ?
Réponse
« Parse, don’t validate » : transformer l’inconnu en type sûr UNE fois à l’entrée (zod
au réseau, defaults aux params, migrations au storage) — plus aucun as à l’intérieur.
3. Que rend possible la règle « lib/ n’importe pas react-native » ?
Réponse
Des tests Jest sans mock, le partage app/web (drill-core), la réutilisation en Node — un mock RN nécessaire dans un test de lib/ signale une fuite d’architecture.
4. Comment rendre testable une fonction qui dépend du hasard ou de l’horloge ?
Réponse
Injecter : rng: () => number = Math.random, now en paramètre — les tests passent
des valeurs seedées/fixes (déterminisme).
5. Le test le plus précieux d’une machine d’état ?
Réponse
Le test de garde (pas de double réponse, pas d’action hors phase) : il verrouille « les états impossibles sont impossibles » contre les refontes.
6. La philosophie de requête de Testing Library ?
Réponse
Interroger ce que l’utilisateur perçoit (texte, rôles d’accessibilité) — jamais l’implémentation : un refactor interne ne casse pas un bon test d’écran.
7. Où mocke-t-on les données SQLite dans les tests d’écrans, et pourquoi ?
Réponse
Au niveau des hooks de query (la frontière qu’on possède) — expo-sqlite ne tourne pas sous Node, et le test reste lisible et stable.
8. La pyramide de tests de Drill et la cadence de chaque étage ?
Réponse
~30 Jest lib/stores (chaque commit, 2 s) → 5-6 écrans RNTL (chaque feature) → 3 flows Maestro E2E (chaque release native, bloquants).
9. Pourquoi Maestro utilise-t-il des testID pour les réponses du quiz ?
Réponse
Le hasard du tirage rend les TEXTES imprévisibles — answer-0 est stable : on teste le
parcours, pas le contenu tiré.
10. Pourquoi Sentry est-il non négociable dès la distribution en release ?
Réponse
Plus de RedBox en release : les crashs sont silencieux chez l’utilisateur — Sentry capte JS
- natif + ANR avec le contexte (version, updateId).
11. Le geste qui accompagne obligatoirement chaque eas update avec Sentry ?
Réponse
npx sentry-expo-upload-sourcemaps dist — sans les source maps du nouveau bundle, les
stacks de prod sont du charabia minifié.
12. Les 5 leviers perf du cours, dans l’ordre ?
Réponse
Listes (FlatList réglée) → animations thread UI → travail hors render (SQL, stores) → démarrage (splash, imports) → réseau perçu (offline-first). Règle zéro : mesurer d’abord.
13. Peut-on builder pour iOS depuis Windows, et que manque-t-il ?
Réponse
Oui (EAS Build cloud, certificats gérés). Ce qui manque : tester — simulateur = Mac ; minimum viable = un iPhone + TestFlight.
14. La doctrine iOS du cours ?
Réponse
Cross-platform dans le code (gratuit, discipliné), mono-plateforme dans l’opération — porter le jour où l’app justifie le loyer (99 $/an, reviews, matériel).
15. Le vrai partage app/web pour un dev Next.js ?
Réponse
La logique pure (drill-core : schémas, scoring, tirage) entre l’app Expo et un site Next.js — le cœur en TS pur, les UI par plateforme (react-native-web reste un outil de démo).
16. L’arbre de décision d’un besoin natif, du premier au dernier recours ?
Réponse
Module expo-* → lib communautaire saine (directory) → config plugin (config pure) → Expo Modules API (module custom local, minuscule, à maintenir).
17. Le bon modèle de monétisation par défaut d’une app OUTIL de niche ?
Réponse
Freemium + IAP one-shot (Pro unlock 3-10 €, conversion 1-5 %) — l’abonnement exige une valeur récurrente réelle, la pub exige du volume (eCPM en centimes).
18. Quand Google Play Billing est-il obligatoire, et la commission indé ?
Réponse
Pour tout bien numérique consommé dans l’app — 15 % jusqu’à 1 M$/an. Stripe interdit pour le numérique in-app (motif de retrait).
19. Les trois bugs IAP qui coûtent la confiance ?
Réponse
La restauration cassée (bouton + check au démarrage), l’achat non livré (le listener customerInfo rattrape), l’annulation traitée en erreur (c’est un « non merci »).
20. L’ordre de diagnostic business immuable ?
Réponse
Rétention (restent-ils ?) → conversion (paient-ils ?) → acquisition (viennent-ils ?) — optimiser l’acquisition d’un produit qui ne retient pas = remplir un seau percé.
🏁 Fin du cours. Si les cinq séries passent le barème : vous savez construire, styler, animer, distribuer et maintenir une app Android en React Native — et la faire vivre. La suite est dans les projets et dans le repo drill-questions. Bon drill. ⚛️