Agent skill

test-runner

É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).

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/test-runner

SKILL.md

Test Runner

📥 Contexte à charger

Au démarrage, détecter l'environnement de test du projet.

Contexte Pattern/Action Priorité
Configuration test Glob: jest.config.* ou vitest.config.* ou pytest.iniRead Requis
Tests existants Glob: **/*.test.* **/*.spec.* **/test_*.py Requis
Dernière exécution Read: test-results.json ou coverage/coverage-summary.json Optionnel
Scripts npm test Grep: package.json pour "scripts" et "test" Optionnel

Instructions de chargement

  1. Détecter le framework de test (Jest, Vitest, Pytest, etc.)
  2. Lister les tests existants pour comprendre la structure
  3. Charger les résultats récents si disponibles
  4. Identifier la commande de test dans package.json

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)

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 :

typescript
// Format: should_[comportement]_when_[condition]
it('should_return_error_when_user_not_found', ...)
it('should_create_order_when_cart_valid', ...)

Pattern Arrange-Act-Assert :

typescript
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 :

typescript
test('critical payment flow @p0', async () => { ... });
test('user profile update @p1', async () => { ... });

4. Exécuter et valider

Ordre d'exécution :

bash
# 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)

markdown
## 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ô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

markdown
## 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 :

markdown
### ✅ 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 :

markdown
## 🔗 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 ?"

Expand your agent's capabilities with these related and highly-rated skills.

Didn't find tool you were looking for?

Be as detailed as possible for better results