Guías
Probar correos de Nodemailer con Vitest
Prueba el envío de correos con Nodemailer desde una API Express con Vitest.Cualquier servidor que envíe correo transaccional mediante Nodemailer puede entregarlo a InboxTap
en lugar de a un proveedor real. Así, los correos de bienvenida, los tokens de invitación y los
códigos OTP pueden comprobarse en pruebas de integración. El proyecto ejecutable completo, una
API Express probada con Vitest, está en
examples/express-nodemailer.
Apuntar Nodemailer a InboxTap
InboxTap acepta SMTP plano sin autenticación y sin STARTTLS, así que el transporte necesita
exactamente tres opciones no predeterminadas y ningún campo 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,
});Todo lo demás del código de envío mantiene su forma de producción: from, to, subject, text
y html pasan sin cambios y se capturan tal cual.
Probar con Vitest
Inicia InboxTap de forma programática en puertos efímeros para cada archivo de pruebas y, después, proporciona el host y el puerto SMTP asignados a la aplicación que se está probando. Cada archivo que se ejecuta en paralelo obtiene un conjunto de servicios aislado:
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 });Cada prueba crea su propio buzón y elige la función auxiliar de espera correspondiente al contenido del correo:
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);
});Las demás pruebas del ejemplo muestran el resto del conjunto de herramientas: waitForMatch()
extrae un token de
invitación personalizado con pattern: /invite_[a-f0-9]{12}/, waitForCode() obtiene un OTP de
seis dígitos con su patrón por defecto y waitForMessage() devuelve el correo capturado completo
para aserciones de forma sobre destinatarios, HTML y enlaces extraídos.
Ejecutar el ejemplo
cd examples/express-nodemailer
npm install
npm testLas pruebas inician InboxTap y la aplicación Express en puertos efímeros, sin otra terminal ni
conflictos con los puertos de otros procesos. Para una exploración interactiva, ejecuta
npx inboxtap en una terminal y npm run dev en otra, inicia un envío con curl y
léelo desde http://localhost:8025/api/emails/latest.