Traduit automatiquement de l’anglais.

Lire en anglais
Proxy Mail QA

Tester les e-mails d’inscription dans Playwright

Pour tester la vérification d’e-mail dans Playwright, donnez à chaque test une adresse neuve, inscrivez-vous avec, puis attendez le code ou le lien et terminez le parcours. Avec le paquet proxymail-qa, cela tient en deux appels : createAddress avant le formulaire, waitForCode ou waitForLink après. Cela fonctionne avec le forfait Free, en local et dans CI.

Mis à jour le

Configuration

Installez le paquet proxymail-qa et placez une clé d’API dans PROXYMAIL_QA_API_KEY, dans votre shell, dans un fichier .env exclu de Git ou dans les secrets de votre CI. Le forfait Free suffit.

npm install --save-dev proxymail-qa

Le test

Importez test et expect depuis proxymail-qa/playwright : chaque test reçoit une fixture qa, un client qui nomme aussi le test dans chaque appel pour le rapport décrit plus bas.

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);
});

Pour un lien plutôt qu’un code :

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

type vaut verify, magic_signin, invite, reset ou any. Adaptez les libellés et les routes à votre application plutôt que de copier ceux-ci.

Vérifier l’e-mail, pas seulement le code

Une inscription réussie peut quand même cacher un e-mail défaillant. Ces vérifications détectent les cas habituels :

// 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 signale aussi les e-mails qui n’indiquent pas quand le code expire, qui risquent de ne pas tenir sur un téléphone et, avec expectText et expectLanguage, les phrases manquantes ou la mauvaise langue. Il renvoie des verdicts, jamais l’e-mail.

L’exécuter dans CI, avec un rapport sur la pull request

Ajoutez l’Action GitHub avant vos tests et le reporter à votre configuration Playwright. Le rapport sur la pull request liste alors les e-mails arrivés et leur délai, le test d’origine de chacun, et les tests échoués avec l’étape en échec.

.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']],
});

Chaque rapport est comparé aux dernières exécutions du même nom : il indique donc aussi quand les e-mails sont devenus plus lents, quand un test reçoit désormais deux e-mails ou quand un test échoue de temps en temps.

Plus d’informations dans la documentation Playwright, le client Node.js et Exécution dans CI.

Essayez-le lors de votre prochain test d’inscription

Offre gratuite, sans carte bancaire. Créez une adresse et regardez arriver le code ou le lien.

Créer un compte gratuitOuvrir l'application

Questions

Comment récupérer le code de vérification dans un test Playwright ?

Notez l’heure juste avant d’envoyer le formulaire, puis appelez qa.waitForCode(address, { since }). L’appel attend l’e-mail jusqu’à 30 secondes et renvoie le code seul : aucune analyse d’e-mail dans votre test. Pour un lien, waitForLink renvoie l’URL à ouvrir avec page.goto.

Pourquoi mon test récupère-t-il parfois un ancien code ?

Sans since, une attente peut correspondre à un e-mail d’une étape ou d’une exécution précédente. Passez l’heure d’envoi du formulaire, et donnez à chaque test sa propre adresse.

Que se passe-t-il si l’e-mail n’arrive jamais ?

L’attente échoue avec un message expliquant pourquoi, autant que Proxy Mail QA puisse le savoir : le plus souvent, le fournisseur d’e-mail de l’application est en mode sandbox ou test et n’envoie qu’aux adresses vérifiées. Un délai plus long n’y changera rien ; corrigez le côté envoi.

Les tests peuvent-ils s’exécuter en parallèle ?

Oui. Donnez à chaque test sa propre adresse, ou une adresse par exécution avec un tag plus par test (nom+worker1@ arrive sur nom@, et l’attente ne correspond qu’à son propre tag). Une attente compte comme une seule requête, quelle que soit sa durée.

Vous avez créé votre application avec un outil d’IA ? Choisissez le vôtre

Une question sur cette page ?

Posez votre question dans la langue de votre choix. La documentation peut y répondre tout de suite, ou vous pouvez l'envoyer à l'équipe Proxy Mail QA, qui répond en anglais.

Interroger la documentation