Exemples
Testez les flux de vérification, lien magique et OTP de Better Auth via InboxTap avec Playwright.Better Auth + Next.js + InboxTap
Une application Next.js minimale qui utilise Better Auth pour la vérification des adresses e-mail, la connexion par lien magique et les codes OTP reçus par e-mail. Sa suite Playwright exécute chaque parcours à partir des vrais e-mails capturés par InboxTap.
Prérequis
- Node.js 20 ou version ultérieure
npx playwright install chromium(téléchargement unique du navigateur)better-sqlite3compile un module natif pendant l’installation. En cas d’échec, installez une chaîne de compilation C++ fonctionnelle : Xcode Command Line Tools sous macOS oubuild-essentialsous Debian et Ubuntu
Installation
npm install
npx playwright install chromiumLancer les tests
npm testLes tests démarrent eux-mêmes InboxTap et l’application : aucun autre terminal n’est nécessaire. La
configuration webServer de Playwright lance npx inboxtap (SMTP sur :1025, API HTTP sur
:8025) et next dev (:3000), attend que les deux URL de contrôle d’état répondent, puis arrête
tous les processus.
Lancer l’exemple en mode interactif
npx inboxtapPuis, dans un deuxième terminal :
npm run db:migrate
npm run devOuvrez http://localhost:3000, inscrivez-vous avec l’adresse de votre choix, puis consultez l’e-mail capturé :
curl http://localhost:8025/api/emails/latestFonctionnement
lib/mailer.tsest l’unique point de configuration SMTP : Nodemailer y est dirigé verslocalhost:1025(secure: false,ignoreTLS: true— InboxTap utilise le SMTP sans chiffrement ni authentification).- Toutes les fonctions de rappel d’envoi de Better Auth (
sendVerificationEmail,sendMagicLink,sendVerificationOTP) passent par la même fonction utilitairesendMail. Chaque e-mail contient du texte brut avec exactement un lien ou un code à six chiffres, ce qui rend l’extraction déterministe. - Les tests appellent
inboxTap.createInbox()dans chaque test. Chaque boîte reçoit une adresse unique : les processus Playwright parallèles partagent ainsi un serveur InboxTap sans lire les messages des autres, etauth.dbn’a pas besoin d’être nettoyé entre les exécutions. inbox.waitForLink()etinbox.waitForCode()interrogent l’API InboxTap jusqu’à l’arrivée de l’e-mail. Le filtre sur l’objet garantit que l’assertion vise un seul message.
Pour développer avec une copie locale d’InboxTap plutôt qu’avec la version publiée sur npm, créez
une archive depuis la racine du dépôt (bun run build && bun pm pack), puis installez ici le fichier
.tgz généré avec npm install.
Dépannage
waitForLinkouwaitForCodedépasse le délai imparti — consultez les journaux de l’application pour repérer d’éventuelles erreurs SMTP et vérifiez qu’InboxTap écoute bien :curl http://localhost:8025/health.- Un port est déjà utilisé — un autre processus occupe
:1025,:8025ou:3000. En local, la configuration réutilise les serveurs existants ; un ancien processusnext devlancé depuis un autre projet compte donc également. - Des erreurs de schéma apparaissent après une mise à jour de Better Auth — supprimez
auth.db, puis relanceznpm run db:migrate. Cette base ne contient que des données de test jetables.