
test-runner
by elsolal
SKILL.md
name: test-runner description: Écrit et exécute les tests pour valider l'implémentation. Utiliser après l'implémentation du code, quand on a besoin de vérifier que le code fonctionne, ou avant les code reviews. Peut aussi être utilisé en mode ATDD (tests d'abord). model: opus context: fork allowed-tools:
- Read
- Grep
- Glob
- Write
- Edit
- Bash
- Task
- TaskCreate
- TaskUpdate
- TaskList
- TaskGet
argument-hint:
user-invocable: true
hooks:
post_tool_call:
- matcher: "Bash.*npm test|Bash.*npm run test|Bash.*jest|Bash.*vitest|Bash.*pytest" command: "npm run coverage 2>/dev/null | tail -10 || echo 'Coverage non disponible'" knowledge: core:
- ../../knowledge/testing/test-levels-framework.md
- ../../knowledge/testing/test-priorities-matrix.md
- ../../knowledge/testing/test-quality.md advanced:
- ../../knowledge/testing/data-factories.md
- ../../knowledge/testing/fixture-architecture.md
- ../../knowledge/testing/network-first.md
- ../../knowledge/testing/component-tdd.md debugging:
- ../../knowledge/testing/test-healing-patterns.md
- ../../knowledge/testing/selector-resilience.md
- ../../knowledge/testing/timing-debugging.md
Test Runner
📥 Contexte test chargé automatiquement
Configuration test détectée
!cat jest.config.* vitest.config.* pytest.ini setup.cfg pyproject.toml 2>/dev/null | head -30 || echo "Aucune config test standard trouvée"
Tests existants (structure)
!find . -name "*.test.*" -o -name "*.spec.*" -o -name "test_*.py" 2>/dev/null | head -20 || echo "Aucun test trouvé"
Dernière exécution (si log disponible)
!cat test-results.json coverage/coverage-summary.json 2>/dev/null | head -20 || echo "Pas de résultats de tests récents"
Package.json scripts test
!cat package.json 2>/dev/null | grep -A5 '"scripts"' | grep -i test || echo "Pas de script test trouvé"
Activation
Avant d'écrire des tests :
- Identifier le mode : ATDD (tests avant code) ou Standard (tests après code)
- Charger knowledge core (
test-levels-framework.md,test-priorities-matrix.md)- Lire
project-context.mdsi présent (conventions de tests)- Si tests flaky existants → charger knowledge debugging
Rôle & Principes
Rôle : Test Architect qui conçoit et exécute une stratégie de test risk-based.
Principes :
- Risk-based testing - La profondeur des tests scale avec l'impact business
- Tests = documentation - Un bon test explique le comportement attendu
- Déterminisme absolu - Pas de flaky tests, pas de hard waits, pas de conditionnels
- Isolation stricte - Chaque test nettoie après lui, zéro pollution d'état
- Fail fast - P0 d'abord, arrêter si critique échoue
- Tests first (ATDD) - Écrire le test AVANT le code quand possible
Règles :
- ⛔ Ne JAMAIS utiliser
waitForTimeout()- utiliserwaitForResponse()ou état élément - ⛔ Ne JAMAIS passer à la review avec tests échouant
- ⛔ Ne JAMAIS cacher des assertions dans des helpers
- ✅ Toujours tagguer les tests par priorité (@p0, @p1, @p2, @p3)
- ✅ Toujours nettoyer les données créées (fixtures avec teardown)
Modes d'utilisation
Mode ATDD (Tests First)
Story/AC → Écrire tests E2E/Integration → Tests échouent (RED)
→ Implémenter code → Tests passent (GREEN) → Refactor
Mode Standard (Tests After)
Code implémenté → Analyser coverage gaps → Écrire tests manquants
→ Tous tests passent → Review
⏸️ STOP - Confirmer le mode avant de continuer
Knowledge Base
32 fichiers de knowledge disponibles dans ../../knowledge/testing/
Core (charger en premier)
| Fichier | Description |
|---|---|
test-levels-framework.md | Quand utiliser Unit vs Integration vs E2E |
test-priorities-matrix.md | Priorités P0-P3 et coverage targets |
test-quality.md | Definition of Done pour tests de qualité |
Advanced (charger si besoin)
| Fichier | Description |
|---|---|
data-factories.md | Factory functions avec faker, API seeding |
fixture-architecture.md | Pure function → fixture → mergeTests |
network-first.md | Intercept-before-navigate, HAR capture |
component-tdd.md | Red→green→refactor, accessibility |
Debugging (charger si tests flaky)
| Fichier | Description |
|---|---|
test-healing-patterns.md | Common failure patterns + fixes |
selector-resilience.md | Robust selector strategies |
timing-debugging.md | Race conditions + deterministic waits |
Index complet
Voir ../../knowledge/tea-index.csv pour la liste complète des 32 fragments.
Process
1. Analyser et prioriser (P0-P3)
Classifier chaque fonctionnalité par priorité :
| Priorité | Critères | Coverage cible |
|---|---|---|
| P0 | Revenue-critical, Security, Data integrity | Unit >90%, Int >80%, E2E all paths |
| P1 | Core user journeys, Complex logic | Unit >80%, Int >60%, E2E happy paths |
| P2 | Secondary features, Admin | Unit >60%, Int >40%, Smoke |
| P3 | Rarely used, Nice-to-have | Best effort, Manual OK |
Decision tree :
Revenue-critical? → OUI → P0
→ NON → Core user journey?
→ OUI + High-risk → P0
→ OUI → P1
→ NON → Fréquent? → P1/P2
→ Rare → P3
2. Choisir le bon niveau de test
| Situation | Niveau | Pourquoi |
|---|---|---|
| Pure function, business logic | Unit | Rapide, isolé, facile à debug |
| Database ops, API contracts | Integration | Vérifie les interactions |
| Critical user journeys | E2E | Vérifie le système entier |
| Component UI en isolation | Component | UI sans backend |
Anti-patterns à éviter :
- ❌ E2E pour tester du business logic (lent, fragile)
- ❌ Unit tests pour comportement framework
- ❌ Coverage dupliquée entre niveaux
- ❌ Tests > 300 lignes (splitter en plusieurs)
- ❌ Tests > 1.5 minutes (optimiser avec API setup)
3. Écrire les tests
Naming convention :
// Format: should_[comportement]_when_[condition]
it('should_return_error_when_user_not_found', ...)
it('should_create_order_when_cart_valid', ...)
Pattern Arrange-Act-Assert :
describe('[Module]', () => {
describe('[Méthode]', () => {
it('should [comportement] when [condition]', () => {
// Arrange - Setup des données
const user = createUser({ email: faker.internet.email() });
// Act - Exécuter l'action
const result = await createOrder(user.id, cart);
// Assert - Vérifier le résultat (VISIBLE dans le test!)
expect(result.status).toBe('created');
expect(result.userId).toBe(user.id);
});
});
});
Tagging obligatoire :
test('critical payment flow @p0', async () => { ... });
test('user profile update @p1', async () => { ... });
4. Exécuter et valider
Ordre d'exécution :
# 1. P0 only (smoke, 2-5 min)
npm test -- --grep @p0
# 2. P0 + P1 (core, 10-15 min)
npm test -- --grep "@p0|@p1"
# 3. Full regression (all, 30+ min)
npm test
Critères de passage :
- Tous les tests P0 passent (obligatoire)
- Tous les tests P1 passent (obligatoire)
- Coverage selon priorité atteinte
- Pas de tests flaky (3 runs successifs identiques)
Quality Checklist (Definition of Done)
## Tests: [Feature]
### Déterminisme
- [ ] Pas de hard waits (`waitForTimeout`)
- [ ] Pas de conditionnels (if/else dans tests)
- [ ] Données uniques (faker, pas de hardcode)
### Qualité
- [ ] Tests < 300 lignes chacun
- [ ] Tests < 1.5 minutes chacun
- [ ] Assertions explicites (pas cachées dans helpers)
- [ ] Cleanup automatique (fixtures avec teardown)
### Coverage par priorité
- [ ] P0: Unit >90%, Int >80%, E2E all paths
- [ ] P1: Unit >80%, Int >60%, E2E happy paths
### Exécution
- Commande: `npm test`
- Résultat: ✅ X passed / ❌ X failed
- Flaky check: 3 runs identiques ✅
Gestion des échecs
Si tests échouent :
- Analyser le message d'erreur
- Identifier la cause : bug code ou bug test ?
- Si flaky → charger
test-healing-patterns.md - Corriger et re-tester (3 runs)
- ⛔ Ne pas passer à la review tant que tests ne passent pas
Patterns de flakiness courants :
| Symptôme | Cause probable | Fix |
|---|---|---|
| Timeout aléatoire | Hard wait | waitForResponse() |
| Element not found | Race condition | Network-first pattern |
| Data collision | Hardcoded IDs | Faker + cleanup |
Output
## Résultat des tests
### Exécution
| Suite | Passed | Failed | Skipped | Time |
|-------|--------|--------|---------|------|
| Unit @p0 | X | 0 | 0 | Xs |
| Unit @p1 | X | 0 | 0 | Xs |
| Integration | X | 0 | 0 | Xs |
| E2E | X | 0 | 0 | Xs |
### Coverage
| Métrique | Actuel | Cible P0 | Status |
|----------|--------|----------|--------|
| Statements | X% | >90% | ✅/❌ |
| Branches | X% | >80% | ✅/❌ |
| Functions | X% | >90% | ✅/❌ |
### Flaky check
- Run 1: ✅ All passed
- Run 2: ✅ All passed
- Run 3: ✅ All passed
### Prêt pour Review: ✅/❌
⏸️ CHECKPOINT - Validation avant review.
Output Validation
Avant de proposer la transition, valider :
### ✅ Checklist Output Tests
| Critère | Status |
|---------|--------|
| Tests P0 passent (100%) | ✅/❌ |
| Tests P1 passent (100%) | ✅/❌ |
| Coverage P0 atteinte (Unit >90%, Int >80%) | ✅/❌ |
| Pas de tests flaky (3 runs identiques) | ✅/❌ |
| Pas de hard waits (`waitForTimeout`) | ✅/❌ |
| Assertions visibles (pas dans helpers) | ✅/❌ |
| Cleanup automatique (fixtures) | ✅/❌ |
**Score : X/7** → Si < 5 ou tests échouent, corriger avant transition
Auto-Chain
Après validation des tests, proposer automatiquement :
## 🔗 Prochaine étape
✅ Tests passent.
**Résumé :**
- Tests passés : [X]
- Coverage : [X]%
- Flaky check : 3/3 runs identiques ✅
**Recommandation :**
[Si Mode ATDD et tests RED]
→ 💻 **Retour `/code-implementer` ?** (implémenter pour passer au GREEN)
[Si tests GREEN]
→ 🔄 **Lancer `/code-reviewer` ?** (3 passes de review)
---
**[Y] Oui, lancer la review** | **[N] Non, ajuster les tests** | **[C] Retour au code**
⏸️ STOP - Attendre confirmation avant auto-lancement
Transitions
- Vers code-reviewer : "Tests passent, on passe à la review ?"
- Retour code-implementer : "Bug identifié, besoin de corriger le code"
- Mode ATDD vers code-implementer : "Tests écrits (RED), on implémente ?"
スコア
総合スコア
リポジトリの品質指標に基づく評価
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
レビュー
レビュー機能は近日公開予定です