Communitygithub.com

sorvo01/qa-agent-fähigkeiten

Testen Sie Web3-dApps End-to-End mit Synpress (Playwright + MetaMask): Wallet-Einrichtung, Verbinden, Signieren, Transaktionen senden, Netzwerke wechseln und das Ergebnis nicht nur in der UI, sondern auch on-chain überprüfen. Verwenden Sie dies, wenn eine dApp, ein Wallet-Flow, ein Token-Transfer, Staking, eine Governance-Abstimmung oder eine Smart-Contract-Oberfläche getestet werden muss oder ein Bug reproduziert werden soll.

Was ist qa-agent-fähigkeiten?

Diese Fähigkeit ermöglicht es KI-Agenten, Web3-dApps umfassend mit Synpress zu testen, einem auf Playwright basierenden Framework, das MetaMask nahtlos integriert. Es stellt sicher, dass Tests nicht nur die UI validieren, sondern auch den tatsächlichen On-Chain-Zustand überprüfen, da die Blockchain die einzige vertrauenswürdige Quelle ist. Die Skill unterstützt Schlüsselflows wie Wallet-Verbindung, Netzwerkwechsel, Token-Genehmigungen und Governance-Abstimmungen und deckt kritische Szenarien wie abgelehnte Signaturen, ausstehende Transaktionen und Präzisionsfehler ab. Sie automatisiert die Einrichtung von Anvil-Testchains, cacht Wallet-Profile für gleichbleibende Testbedingungen und liefert reproduzierbare Ergebnisse für Bug-Reports durch die Verknüpfung von UI-Status mit On-Chain-Daten wie Transaktionshashes und Blocknummern.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/sorvo01/qa-agent-skills/tree/HEAD/skills/web3-synpress

In Ihrer bevorzugten KI fragen

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

Dokumentation

Web3-dApp-Tests mit Synpress

Die wichtigste Regel in Web3: Die UI ist nicht die Quelle der Wahrheit, die Blockchain ist es. Eine dApp kann "Erfolg" für eine Transaktion anzeigen, die rückgängig gemacht wurde, ersetzt wurde oder die Wallet nie verlassen hat. Jeder Test, der den Status ändert, endet mit einer On-Chain-Überprüfung.

Einrichtung

Überprüfen Sie zuerst, was das Projekt verwendet. Diese Notizen beziehen sich auf Synpress v4 (Playwright-basiert). v3 basierte auf Cypress und seine API ist anders.

npm i -D @synthetixio/synpress @playwright/test viem

Verwenden Sie "type": "module" in package.json und "moduleResolution": "Bundler" in tsconfig.json (siehe examples/tsconfig.json); Synpress liefert ES-Module aus. Installieren Sie die @playwright/test-Version, von der Synpress abhängt (npm ls @playwright/test), sonst erhalten Sie zwei Playwright-Kopien mit inkompatiblen Typen.

Starten Sie eine lokale Chain, damit Tests schnell, kostenlos und wiederholbar sind. Foundrys Anvil ist die übliche Wahl:

anvil --chain-id 31337 --block-time 1        # 10 finanzierte Konten aus der Standard-Test-Mnemonic
# Oder forken Sie ein echtes Netzwerk bei einem festen Block, sodass der Vertragsstatus bei jedem Lauf gleich ist:
anvil --fork-url $RPC_URL --fork-block-number 21000000

Verwenden Sie niemals eine Seed-Phrase, die jemals echte Gelder enthalten hat. Verwenden Sie die Anvil-Test-Mnemonic oder ein dediziertes Wegwerf-Wallet, das in Umgebungsvariablen gespeichert und niemals committet wird.

Wallet-Einrichtung und Cache

Synpress erstellt ein Browser-Profil mit bereits konfiguriertem MetaMask und cached es, sodass Tests das Wallet nicht jedes Mal neu importieren müssen. Siehe examples/wallet-setup/basic.setup.ts.

npx synpress            # erstellt den Cache aus jeder *.setup.ts im wallet-setup-Ordner

Bauen Sie den Cache neu auf, wenn sich die Setup-Datei oder die MetaMask-Version ändert. In CI benötigt die Extension ein Display: Führen Sie Tests unter xvfb-run aus.

Was abgedeckt werden sollte

FlowFälle, die echte Bugs finden
Verbindenerste Verbindung, Verbindung ablehnen, trennen und wieder verbinden, Wallet gesperrt, falsches Konto ausgewählt
NetzwerkdApp auf der falschen Chain, Benutzer wechselt die Chain während des Flows, Netzwerk hinzufügen, das der Wallet fehlt
Signieren (SIWE, Permits)bestätigen, ablehnen, mit Konto A signieren, dann zu B wechseln vor dem Absenden
Transaktionbestätigen, ablehnen, unzureichendes Guthaben, Gasspitze, ersetzte oder beschleunigte Tx, Rückgängigmachung durch den Vertrag
Token-Genehmigungexakte vs. unbegrenzte Genehmigung, genehmigen dann ausgeben, ausgeben ohne Genehmigung
Ausstehender Zustandneu laden während des Wartens, Tab schließen und zurückkommen, zwei Transaktionen hintereinander
AnzeigeGuthaben nach der Tx (UI vs. Chain), Dezimalstellen und Rundung, sehr große und Staubmengen

Das Ablehnen in der Wallet ist genauso wichtig wie das Bestätigen. Viele dApps hängen nach einer Ablehnung für immer in "Warte auf Bestätigung" fest.

Schreiben eines Tests

Muster (vollständige Datei in examples/transfer.spec.ts):

  1. Lesen Sie den Startzustand von der Chain mit viem (getBalance, readContract).
  2. Steuern Sie die dApp-UI mit Playwright-Lokatoren und die Wallet mit dem MetaMask-Helfer (connectToDapp, confirmSignature, confirmTransaction, rejectTransaction, switchNetwork).
  3. Holen Sie sich den Transaktions-Hash aus der UI, einem Event oder der Netzwerkantwort, dann waitForTransactionReceipt.
  4. Bestätigen Sie den Empfangsstatus und den neuen On-Chain-Zustand. Bestätigen Sie dann, dass die UI zustimmt.

Halten Sie Wallet-unabhängige Logik (Betragsvalidierung, Formatierung, Fehlertexte) in schnelleren Tests mit Synpress' Ethereum-Wallet-Mock oder in einfachem Playwright mit einem gemockten Provider. Verwenden Sie echte MetaMask nur für die Flows, bei denen die Extension selbst wichtig ist.

Typische Bugs, auf die Sie achten sollten

  • UI zeigt Erfolg, während der Empfangsstatus reverted ist, oder bevor der Empfang überhaupt existiert.
  • Guthaben in der UI ist gecached und aktualisiert sich nicht nach der Transaktion.
  • Betragspräzision: 18-stellige Token mit Float-Rundung angezeigt; Max-Button hinterlässt Staub oder überschreitet das Guthaben um 1 Wei.
  • Nach einem Chain-Wechsel ruft die dApp weiterhin die Vertragsadresse der alten Chain auf.
  • Eine abgelehnte Signatur deaktiviert den Button bis zum Neuladen.
  • Dieselbe Aktion kann zweimal gesendet werden, während die erste Transaktion aussteht.
  • Governance: Stimme in der UI gezählt, aber der Vorschlagsstatus auf der Chain unverändert (falsche Vorschlags-ID, Stimme nach dem Frist-Block abgegeben).

Melden Sie einen Web3-Bug mit

Netzwerk und Chain-ID, Vertragsadresse, Wallet-Adresse (nur Test-Wallet), Transaktions-Hash und Blocknummer, Empfangsstatus, was die UI anzeigte vs. was die Chain zeigt, MetaMask-Version. Ein Block-Explorer-Link (oder Anvil-Trace mit cast run <txhash>) ist der beste Beweis.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Verwandte Skills