Guides
Tester les emails Nodemailer avec Vitest
Testez l’envoi Nodemailer depuis une API Express avec Vitest.Tout service qui envoie des emails transactionnels via Nodemailer peut les livrer à InboxTap plutôt
qu’à un vrai fournisseur, ce qui rend les emails de bienvenue, les jetons d’invitation et les OTP
vérifiables dans des tests d’intégration. Le projet complet et exécutable — une API Express testée
avec Vitest — se trouve dans
examples/express-nodemailer.
Pointer Nodemailer vers InboxTap
InboxTap accepte le SMTP simple, sans authentification ni STARTTLS, donc le transport a besoin
d’exactement trois options non par défaut et d’aucun champ auth :
import { createTransport } from "nodemailer";
const transport = createTransport({
host: process.env.SMTP_HOST ?? "localhost",
port: Number(process.env.SMTP_PORT ?? 1025),
secure: false,
ignoreTLS: true,
});Tout le reste du code d’envoi garde sa forme de production : from, to, subject, text et
html passent inchangés et sont capturés tels quels.
Tester avec Vitest
Démarrez InboxTap programmatiquement sur des ports éphémères dans chaque fichier de test, puis passez l’hôte et le port SMTP assignés à l’application testée. Les fichiers de test parallèles reçoivent chacun une pile isolée :
const server = await new InboxTapServer({ apiPort: 0, smtpPort: 0 }).start();
const inboxTap = new InboxTapClient({ baseUrl: server.apiUrl, domain: server.domain });
const mailer = createMailer({ host: server.smtpHost, port: server.smtpPort });Chaque test crée sa propre boîte et choisit la méthode d’attente qui correspond au contenu de l’email :
it("verifies a new user through the emailed link", async () => {
const inbox = await inboxTap.createInbox({ alias: "signup" });
await postJson(`${baseUrl}/signup`, { email: inbox.address });
const link = await inbox.waitForLink({ subject: /welcome/i, contains: "/verify?token=" });
const verify = await fetch(link);
expect(verify.status).toBe(200);
});Les autres tests de l’exemple montrent le reste de la boîte à outils : waitForMatch() extrait un
jeton d’invitation personnalisé avec pattern: /invite_[a-f0-9]{12}/, waitForCode() récupère un
OTP à six chiffres avec son motif par défaut, et waitForMessage() renvoie l’email capturé
complet pour des assertions de forme sur les destinataires, le HTML et les liens extraits.
Lancer le projet exemple
cd examples/express-nodemailer
npm install
npm testLes tests démarrent eux-mêmes InboxTap et l’application Express sur des ports éphémères — aucun autre
terminal nécessaire, et aucun conflit de port avec ce qui tourne déjà. Pour une exploration
interactive, lancez npx inboxtap dans un terminal et npm run dev dans un autre, déclenchez un
email avec curl et relisez-le depuis http://localhost:8025/api/emails/latest.