スキル一覧に戻る
elsolal

test-runner

by elsolal

0🍴 0📅 2026年1月25日
GitHubで見るManusで実行

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 :

  1. Identifier le mode : ATDD (tests avant code) ou Standard (tests après code)
  2. Charger knowledge core (test-levels-framework.md, test-priorities-matrix.md)
  3. Lire project-context.md si présent (conventions de tests)
  4. 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() - utiliser waitForResponse() 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)

FichierDescription
test-levels-framework.mdQuand utiliser Unit vs Integration vs E2E
test-priorities-matrix.mdPriorités P0-P3 et coverage targets
test-quality.mdDefinition of Done pour tests de qualité

Advanced (charger si besoin)

FichierDescription
data-factories.mdFactory functions avec faker, API seeding
fixture-architecture.mdPure function → fixture → mergeTests
network-first.mdIntercept-before-navigate, HAR capture
component-tdd.mdRed→green→refactor, accessibility

Debugging (charger si tests flaky)

FichierDescription
test-healing-patterns.mdCommon failure patterns + fixes
selector-resilience.mdRobust selector strategies
timing-debugging.mdRace 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èresCoverage cible
P0Revenue-critical, Security, Data integrityUnit >90%, Int >80%, E2E all paths
P1Core user journeys, Complex logicUnit >80%, Int >60%, E2E happy paths
P2Secondary features, AdminUnit >60%, Int >40%, Smoke
P3Rarely used, Nice-to-haveBest 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

SituationNiveauPourquoi
Pure function, business logicUnitRapide, isolé, facile à debug
Database ops, API contractsIntegrationVérifie les interactions
Critical user journeysE2EVérifie le système entier
Component UI en isolationComponentUI 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 :

  1. Analyser le message d'erreur
  2. Identifier la cause : bug code ou bug test ?
  3. Si flaky → charger test-healing-patterns.md
  4. Corriger et re-tester (3 runs)
  5. ⛔ Ne pas passer à la review tant que tests ne passent pas

Patterns de flakiness courants :

SymptômeCause probableFix
Timeout aléatoireHard waitwaitForResponse()
Element not foundRace conditionNetwork-first pattern
Data collisionHardcoded IDsFaker + 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 ?"

スコア

総合スコア

50/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

レビュー

💬

レビュー機能は近日公開予定です