Traducido automáticamente del inglés.

Leer en inglés
Proxy Mail QA

Prueba correos de registro en Playwright

Para probar la verificación por correo en Playwright, da a cada prueba una dirección nueva, regístrate con ella y luego espera el código o enlace y completa el flujo. Con el paquete proxymail-qa son dos llamadas: createAddress antes del formulario, waitForCode o waitForLink después. Funciona en el plan Free, en local y en CI.

Actualizado el

Configuración

Instala el paquete proxymail-qa y pon una clave de API en PROXYMAIL_QA_API_KEY, en tu shell, en un archivo .env excluido de Git o en los secretos de tu CI. El plan Free es suficiente.

npm install --save-dev proxymail-qa

La prueba

Importa test y expect desde proxymail-qa/playwright: cada prueba recibe un fixture qa, un cliente que además nombra la prueba en cada llamada para el reporte descrito abajo.

signup.spec.ts
import { test, expect } from 'proxymail-qa/playwright';
test('sign-up sends a working code', async ({ page, qa }) => {
const { address, password } = await qa.createAddress({ persona: true, password: true });
const submitted = new Date();
await page.goto('/signup');
await page.getByLabel('Email').fill(address);
await page.getByLabel('Password').fill(password);
await page.getByRole('button', { name: 'Sign up' }).click();
const { value } = await qa.waitForCode(address, { since: submitted });
await page.getByLabel('Code').fill(value);
await expect(page).toHaveURL(/welcome/);
await qa.deleteAddress(address);
});

Para un enlace en lugar de un código:

const { value: link } = await qa.waitForLink(address, { type: 'verify', since: submitted });
await page.goto(link);

type es verify, magic_signin, invite, reset o any. Ajusta las etiquetas y rutas a tu app en lugar de copiar estas.

Comprueba el correo, no solo el código

Un registro que pasa puede ocultar un correo roto. Estas comprobaciones detectan los casos habituales:

// Exactly one verification email, not two.
await new Promise((resolve) => setTimeout(resolve, 10_000)); // time for a duplicate
expect((await qa.countEmails(address, { since: submitted, type: 'link' })).count).toBe(1);
// Its link goes to staging, not localhost or production, and it passes SPF, DKIM and DMARC.
const result = await qa.checkEmail(address, { since: submitted, type: 'link', expectHost: 'staging.example.com' });
expect(result.failed).toEqual([]);

checkEmail también marca correos que no dicen cuándo caduca el código, que quizá no quepan en un teléfono y, con expectText y expectLanguage, frases faltantes o el idioma equivocado. Devuelve veredictos, nunca el correo.

Ejecútalo en CI, con un reporte en el pull request

Agrega la Action de GitHub antes de tus pruebas y el reporter a tu configuración de Playwright. El reporte en el pull request lista qué correos llegaron y con qué rapidez, de qué prueba vino cada uno, y las pruebas que fallaron con el paso que falló.

.github/workflows/e2e.yml
- uses: aaquib90/proxymail-qa-action@v1
with:
api-key: ${{ secrets.PROXYMAIL_QA_API_KEY }}
- run: npx playwright test
env:
PROXYMAIL_QA_API_KEY: ${{ secrets.PROXYMAIL_QA_API_KEY }}
playwright.config.ts
export default defineConfig({
reporter: [['list'], ['proxymail-qa/playwright/reporter']],
});

Cada reporte se compara con las últimas ejecuciones del mismo nombre, así que también indica cuándo los correos se volvieron más lentos, cuándo una prueba ahora recibe dos correos o cuándo una prueba falla de vez en cuando.

Más en la documentación de Playwright, el cliente de Node.js y Ejecución en CI.

Úsalo en tu próxima prueba de registro

Plan gratuito, sin tarjeta de crédito. Crea una dirección y mira cómo llega el código o el enlace.

Crear una cuenta gratuitaAbrir la aplicación

Preguntas

¿Cómo obtengo el código de verificación en una prueba de Playwright?

Anota la hora justo antes de enviar el formulario y luego llama a qa.waitForCode(address, { since }). Espera hasta 30 segundos el correo y devuelve solo el código, así que no hay que analizar el correo en tu prueba. Para un enlace, waitForLink devuelve la URL que debes abrir con page.goto.

¿Por qué mi prueba a veces toma un código antiguo?

Sin since, una espera puede coincidir con un correo de un paso o ejecución anterior. Pasa la hora en que se envió el formulario y da a cada prueba su propia dirección.

¿Qué pasa si el correo nunca llega?

La espera falla con un mensaje que explica el motivo hasta donde Proxy Mail QA puede saberlo: lo más común es que el proveedor de correo de la app esté en modo sandbox o de prueba y solo envíe a direcciones verificadas. En ese caso, un tiempo de espera más largo no sirve; corrige el lado del envío.

¿Las pruebas pueden ejecutarse en paralelo?

Sí. Da a cada prueba su propia dirección, o una dirección por ejecución con una etiqueta plus por prueba (name+worker1@ llega a name@, y la espera solo coincide con su propia etiqueta). Una espera cuenta como una solicitud, dure lo que dure.

¿Creaste tu app con una herramienta de IA? Elige la tuya

¿Tienes una pregunta sobre esta página?

Pregunta en cualquier idioma. La documentación puede responderte de inmediato, o puedes enviar tu pregunta al equipo de Proxy Mail QA, que responde en inglés.