bentoms-dev/test-engineer

Écrivez des tests qui détectent de vrais bugs et survivent aux refontes. À utiliser pour ajouter des tests à du code nouveau ou existant, choisir entre tests unitaires, d'intégration et de bout en bout, corriger des tests instables, configurer Vitest, Jest ou Playwright, ou examiner une suite de tests pour y déceler des lacunes et de la fragilité.

Qu'est-ce que test-engineer ?

Ce skill transforme l'utilisateur en ingénieur de test expert, capable d'écrire des tests qui offrent à l'équipe la confiance nécessaire pour déployer. Il guide dans le choix du niveau de test le plus adapté (unitaire, intégration, bout en bout) en fonction du comportement à vérifier, en insistant sur le fait de tester uniquement aux limites du système (API tierces, email, paiement, temps, hasard) sans mocker les modules internes. Le skill détaille les bonnes pratiques : structure Arrange-Act-Assert, nommage des tests basé sur le comportement, utilisation de factories et de builders, indépendance des tests, contrôle du temps et de l'aléatoire. Il couvre spécifiquement les tests front-end avec Testing Library et Playwright, ainsi que la gestion des tests instables (flaky) et l'interprétation de la couverture de code. Il est conçu pour fonctionner avec les frameworks modernes comme Vitest, Jest et Playwright, et fournit un format de sortie structuré listant les tests ajoutés, les bugs découverts et la commande pour les exécuter.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/bentoms-dev/skills/tree/HEAD/skills/engineering/test-engineer

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Ingénieur de Test

Vous écrivez des tests qui donnent à l'équipe la confiance nécessaire pour livrer. Un bon test échoue lorsque le comportement change et réussit lorsque seule l'implémentation change.

Avant d'écrire des tests

  1. Détectez la pile existante (exécuteur de tests, style d'assertion, conventions de nommage des fichiers, fixtures, factories, approche de mocking) et conformez-vous-y. N'introduisez pas un deuxième framework.
  2. Identifiez le comportement à tester, en langage simple : "étant donné un panier avec une remise expirée, le paiement affiche le prix complet".
  3. Choisissez le niveau de test le moins coûteux qui peut prouver ce comportement.

Choix du niveau

  • Unitaire : logique pure, calculs, analyseurs syntaxiques, réducteurs, validation. Rapides et nombreux.
  • Intégration : un module avec ses collaborateurs réels (base de données, gestionnaire HTTP, composant rendu avec ses composants enfants réels). C'est là que se trouve la majeure partie de la valeur pour les applications web typiques.
  • Bout en bout : une poignée de parcours utilisateur critiques (inscription, connexion, passage en caisse, paiement). Lents et coûteux, donc gardez-les peu nombreux et stables.

Ne mocker qu'aux limites du système : API HTTP tierces, email, paiements, temps, hasard. Ne mockez pas vos propres modules simplement pour faciliter un test ; cela testerait le mock, pas le code.

Écrire de bons tests

  • Structurez en Arrange, Act, Assert. Un comportement par test.
  • Nommez les tests comme des phrases décrivant le comportement : it('rejette un coupon expiré'), pas it('fonctionne') ou it('appelle validateCoupon').
  • Assertionnez sur les sorties et les effets observables, pas sur les méthodes privées ou les compteurs d'appels, sauf si l'appel est le comportement (par exemple "envoie exactement un email").
  • Couvrez les cas où les bugs se cachent réellement : vide, un, plusieurs, valeurs limites, entrée invalide, null, unicode, très grand, concurrent, échec d'une dépendance, permission refusée.
  • Utilisez des factories ou des builders avec des valeurs par défaut raisonnables, en ne surchargeant que ce qui concerne le test. Évitez les fixtures partagées énormes.
  • Gardez les tests indépendants : aucune dépendance à l'ordre ou à un état laissé par un autre test. Réinitialisez les bases de données et les mocks entre les tests.
  • Contrôlez le temps et le hasard avec des temporisateurs simulés et des générateurs à graine.
  • Pour les corrections de bugs, écrivez d'abord le test qui échoue et confirmez qu'il échoue pour la bonne raison.

Tests front-end

  • Utilisez les requêtes de Testing Library par ordre de priorité : getByRole (avec name), getByLabelText, getByText. Évitez les identifiants de test sauf si rien de sémantique n'existe, et ne faites jamais de requête par classe CSS.
  • Interagissez avec userEvent, pas fireEvent.
  • Attendez les changements UI avec findBy* ou waitFor, jamais avec des pauses fixes.
  • Mockez le réseau avec MSW au niveau HTTP plutôt que de mocker les appels fetch à l'intérieur des composants.

Bout en bout avec Playwright

  • Utilisez des localisateurs basés sur les rôles et des assertions web-first (await expect(locator).toBeVisible()) ; ils attendent automatiquement.
  • Alimentez les données de test via l'API ou la base de données, pas via l'UI, sauf pour le parcours en cours de test.
  • Réutilisez l'état authentifié avec storageState au lieu de vous connecter dans chaque test.
  • Exécutez en parallèle avec des données isolées par worker. Capturez la trace, la capture d'écran et la vidéo en cas d'échec.

Tests instables (flaky)

Traitez un test instable comme un bug. Causes courantes : état partagé, réseau réel, temporisateurs réels, animations, promesses non attendues, dépendance d'ordre, fuseau horaire ou locale. Reproduisez avec des exécutions répétées (--repeat-each=50 dans Playwright, une boucle pour les exécuteurs unitaires), trouvez la cause, corrigez-la. N'ajoutez pas de tentatives pour le masquer.

Couverture

La couverture montre ce qui n'est pas testé ; elle ne prouve pas la qualité. Concentrez-vous sur les chemins critiques et les branches complexes plutôt que de viser un pourcentage. Les tests de mutation (par exemple Stryker) sont un meilleur signal pour les modules importants.

Sortie

Listez les tests ajoutés (par comportement), ce qu'ils couvrent et ce qu'ils ne couvrent pas délibérément, les bugs de production découverts en les écrivant, et la commande pour les exécuter.


Aller plus loin : Scale & Load Engineer est un pack de compétences premium avec des compétences liées, des modèles de production, des scripts et des invites d'évaluation.

Individual skills in this repo

This repo contains 5 individual skills — each has its own dedicated page.

bentoms-dev/ai-feature-engineer

Build reliable, safe and affordable LLM-powered features in real products. Use when adding chat, summarisation, extraction, classification, RAG search, tool calling or agents to an app, when writing prompts or evals, choosing models, controlling cost and latency, or defending against prompt injection.

bentoms-dev/docs-readme-writer

Write developer documentation people actually read and trust. Use when creating or improving a README, getting-started guide, API reference, architecture decision record (ADR), runbook, onboarding guide, changelog or contributing guide, or when docs are outdated, confusing or missing.

bentoms-dev/github-actions-cicd-engineer

Build fast, secure and maintainable CI/CD pipelines with GitHub Actions. Use when creating or fixing workflows, speeding up slow CI, adding caching, matrices or deployments, managing secrets and environments, hardening workflows against supply-chain attacks, or setting up releases and preview deployments.

bentoms-dev/postgres-migrations-engineer

Design PostgreSQL schemas, write zero-downtime migrations and fix slow queries. Use when adding tables, columns, indexes or constraints, changing data on a live database, reviewing a migration for locking risks, reading EXPLAIN ANALYZE output, or working with Prisma, Drizzle, Knex, TypeORM, Rails or Django migrations.

bentoms-dev/shopify-theme-architect

Build, refactor and review Shopify Online Store 2.0 themes. Use when creating or editing Liquid sections, blocks, snippets, templates, theme settings, locales, or theme CSS/JS, and when reviewing a theme for performance, accessibility or merchant editability.

Skills associés