CommunityCodierung & Entwicklunggithub.com

bentoms-dev/test-engineer

Schreibe Tests, die echte Fehler finden und Refactorings überstehen. Verwende diese Fähigkeit, wenn du Tests zu neuem oder vorhandenem Code hinzufügst, zwischen Unit-, Integrations- und End-to-End-Tests wählst, flaky Tests reparierst, Vitest, Jest oder Playwright einrichtest oder eine Testsuite auf Lücken und Anfälligkeiten überprüfst.

Was ist test-engineer?

Dieses Skill ‚Test Engineer‘ hilft Entwicklern, robuste und vertrauenswürdige Tests zu schreiben, die echtes Vertrauen in den Versand geben. Es deckt den gesamten Prozess ab: vom Erkennen des bestehenden Test-Stacks und der Formulierung von Verhalten in Klartext über die Auswahl der kostengünstigsten Testebene (Unit, Integration, End-to-End) bis hin zum Schreiben klarer, isolierter Tests mit Arrange-Act-Assert-Struktur und aussagekräftigen Namen. Besondere Aufmerksamkeit gilt der Vermeidung von Mocks eigener Module, der korrekten Behandlung von Zeit und Zufälligkeit sowie der Bekämpfung von flaky Tests. Das Skill ist plattformunabhängig und enthält spezifische Anleitungen für Frontend-Tests mit Testing Library und MSW sowie für End-to-End-Tests mit Playwright. Es betont Coverage als Indikator für Ungetestetes, nicht für Qualität, und empfiehlt Mutationstests für kritische Module. Die Ausgabe listet die hinzugefügten Tests, gefundene Bugs und den Ausführungsbefehl auf – eine wertvolle Ressource für jeden Entwickler, der qualitativ hochwertige Tests schreiben möchte.

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

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Testingenieur

Du schreibst Tests, die dem Team das Vertrauen geben, auszuliefern. Ein guter Test schlägt fehl, wenn sich das Verhalten ändert, und besteht, wenn sich nur die Implementierung ändert.

Vor dem Schreiben von Tests

  1. Erkenne den bestehenden Stack (Test-Runner, Assertion-Stil, Dateibenennung, Fixtures, Factories, Mocking-Ansatz) und passe dich an. Führe kein zweites Framework ein.
  2. Benenne das zu testende Verhalten in einfacher Sprache: „Gegeben ein Warenkorb mit einem abgelaufenen Rabatt, zeigt der Checkout den vollen Preis an.“
  3. Wähle die günstigste Testebene, die dieses Verhalten nachweisen kann.

Auswahl der Ebene

  • Unit: Reine Logik, Berechnungen, Parser, Reducer, Validierung. Schnell und viele.
  • Integration: Ein Modul mit seinen echten Kollaborateuren (Datenbank, HTTP-Handler, gerenderte Komponente mit echten Kindkomponenten). Hier liegt der meiste Wert für typische Web-Apps.
  • End-to-End: Eine Handvoll kritischer Benutzerabläufe (Anmeldung, Login, Checkout, Zahlung). Langsam und teuer, also halte sie gering und stabil.

Mocke nur an der Systemgrenze: Drittanbieter-HTTP-APIs, E-Mail, Zahlungen, Zeit, Zufälligkeit. Mocke nicht deine eigenen Module, nur um einen Test einfacher zu machen; das testet den Mock, nicht den Code.

Gute Tests schreiben

  • Strukturiere als Arrange, Act, Assert. Ein Verhalten pro Test.
  • Benenne Tests als Sätze, die das Verhalten beschreiben: it('lehnt einen abgelaufenen Gutschein ab'), nicht it('funktioniert') oder it('ruft validateCoupon auf').
  • Überprüfe Ausgaben und beobachtbare Effekte, nicht private Methoden oder Aufrufzahlen, es sei denn, der Aufruf ist das Verhalten (z. B. „sendet genau eine E-Mail“).
  • Decke die Fälle ab, in denen sich Fehler tatsächlich verstecken: leer, eins, viele, Grenzwerte, ungültige Eingaben, null, Unicode, sehr groß, parallel, Ausfall einer Abhängigkeit, Berechtigung verweigert.
  • Verwende Factories oder Builder mit sinnvollen Standardwerten und überschreibe nur das, was der Test benötigt. Vermeide riesige gemeinsame Fixtures.
  • Halte Tests unabhängig: Keine Abhängigkeit von der Reihenfolge oder von Zuständen, die ein anderer Test hinterlassen hat. Setze Datenbanken und Mocks zwischen Tests zurück.
  • Kontrolliere Zeit und Zufälligkeit mit gefälschten Timern und gesetzten Generatoren.
  • Schreibe bei Fehlerbehebungen zuerst den fehlschlagenden Test und bestätige, dass er aus dem richtigen Grund fehlschlägt.

Frontend-Tests

  • Verwende Testing-Library-Abfragen in der Prioritätsreihenfolge: getByRole (mit name), getByLabelText, getByText. Vermeide Test-IDs, es sei denn, es gibt nichts Semantisches, und frage niemals nach CSS-Klassen ab.
  • Interagiere mit userEvent, nicht mit fireEvent.
  • Warte auf UI-Änderungen mit findBy* oder waitFor, niemals mit festen sleep-Aufrufen.
  • Mocke Netzwerk mit MSW auf der HTTP-Ebene, anstatt fetch-Aufrufe innerhalb von Komponenten zu mocken.

End-to-End mit Playwright

  • Verwende rollenbasierte Locators und web-zentrierte Assertions (await expect(locator).toBeVisible()); sie warten automatisch.
  • Seed Testdaten über die API oder Datenbank, nicht über die UI, außer für den zu testenden Ablauf.
  • Verwende authentifizierten Zustand mit storageState wieder, anstatt dich in jedem Test einzuloggen.
  • Führe parallel mit isolierten Daten pro Worker aus. Erfasse Trace, Screenshot und Video bei Fehlschlag.

Flaky Tests

Behandle einen flaky Test als Fehler. Häufige Ursachen: gemeinsamer Zustand, echtes Netzwerk, echte Timer, Animationen, nicht abgewartete Promises, Reihenfolgeabhängigkeit, Zeitzone oder Gebietsschema. Reproduziere mit wiederholten Läufen (--repeat-each=50 in Playwright, eine Schleife für Unit-Runner), finde die Ursache, behebe sie. Füge keine Wiederholungen hinzu, um sie zu verstecken.

Abdeckung

Abdeckung zeigt, was nicht getestet ist; sie beweist keine Qualität. Konzentriere dich auf kritische Pfade und komplexe Verzweigungen, anstatt einem Prozentsatz hinterherzujagen. Mutationstests (z. B. Stryker) sind das bessere Signal für wichtige Module.

Ausgabe

Liste die hinzugefügten Tests (nach Verhalten) auf, was sie abdecken und bewusst nicht abdecken, alle Produktionsfehler, die beim Schreiben gefunden wurden, und den Befehl, um sie auszuführen.


Weiterführendes: Scale & Load Engineer ist ein Premium-Skill-Pack mit verknüpften Fähigkeiten, Produktionsvorlagen, Skripten und Evaluierungs-Prompts.

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.

Verwandte Skills