Automatisch aus dem Englischen übersetzt.

Auf Englisch lesen
Proxy Mail QA

Registrierungs-E-Mails in Playwright testen

Um E-Mail-Bestätigung in Playwright zu testen, gib jedem Test eine frische Adresse, registriere dich damit, warte dann auf den Code oder Link und schließe den Ablauf ab. Mit dem Paket proxymail-qa sind das zwei Aufrufe: createAddress vor dem Formular, waitForCode oder waitForLink danach. Das läuft im Free-Plan, lokal und in CI.

Aktualisiert am

Einrichtung

Installiere das Paket proxymail-qa und lege einen API-Schlüssel in PROXYMAIL_QA_API_KEY ab, in deiner Shell, in einer .env-Datei außerhalb von Git oder in den Secrets deines CI. Der Free-Plan reicht.

npm install --save-dev proxymail-qa

Der Test

Importiere test und expect aus proxymail-qa/playwright: Jeder Test bekommt eine qa-Fixture, einen Client, der in jedem Aufruf auch den Test für den unten beschriebenen Bericht benennt.

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

Für einen Link statt eines Codes:

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

type ist verify, magic_signin, invite, reset oder any. Passe Beschriftungen und Routen an deine App an, statt diese zu kopieren.

Die E-Mail prüfen, nicht nur den Code

Eine erfolgreiche Registrierung kann trotzdem eine kaputte E-Mail verbergen. Diese Prüfungen finden die üblichen Fälle:

// 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 markiert auch E-Mails, die nicht sagen, wann der Code abläuft, die vielleicht nicht auf ein Handy passen, und, mit expectText und expectLanguage, fehlende Formulierungen oder die falsche Sprache. Es liefert Urteile, nie die E-Mail.

In CI ausführen, mit einem Bericht im Pull Request

Füge die GitHub Action vor deinen Tests hinzu und den Reporter zu deiner Playwright-Konfiguration. Der Bericht im Pull Request listet dann, welche E-Mails ankamen und wie schnell, aus welchem Test jede kam, und die fehlgeschlagenen Tests mit dem fehlgeschlagenen Schritt.

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

Jeder Bericht wird mit den letzten Läufen gleichen Namens verglichen, sodass er auch sagt, wenn E-Mails langsamer wurden, ein Test jetzt zwei E-Mails bekommt oder ein Test ab und zu fehlschlägt.

Mehr in der Playwright-Doku, zum Node.js-Client und unter Ausführen in CI.

Probier es bei deinem nächsten Registrierungstest aus

Kostenloser Tarif, keine Kreditkarte nötig. Erstelle eine Adresse und sieh zu, wie der Code oder Link ankommt.

Kostenloses Konto erstellenApp öffnen

Fragen

Wie bekomme ich den Bestätigungscode in einem Playwright-Test?

Merke dir die Zeit kurz vor dem Absenden des Formulars und rufe dann qa.waitForCode(address, { since }) auf. Es wartet bis zu 30 Sekunden auf die E-Mail und liefert den Code allein zurück, also kein E-Mail-Parsing in deinem Test. Für einen Link liefert waitForLink die URL, die du mit page.goto öffnest.

Warum erwischt mein Test manchmal einen alten Code?

Ohne since kann ein Warten auf eine E-Mail aus einem früheren Schritt oder Testlauf passen. Übergib die Zeit, zu der das Formular abgeschickt wurde, und gib jedem Test eine eigene Adresse.

Was passiert, wenn die E-Mail nie ankommt?

Das Warten schlägt fehl, mit einer Meldung, warum, soweit Proxy Mail QA das erkennen kann: Meist ist der E-Mail-Anbieter der App im Sandbox- oder Testmodus und sendet nur an verifizierte Adressen. Ein längeres Timeout hilft dann nicht; behebe es auf der Sendeseite.

Können Tests parallel laufen?

Ja. Gib jedem Test eine eigene Adresse oder eine Adresse pro Lauf mit einem Plus-Tag pro Test (name+worker1@ kommt bei name@ an, und das Warten passt nur auf das eigene Tag). Ein Warten zählt als eine Anfrage, egal wie lange es dauert.

Deine App mit einem KI-Tool gebaut? Wähle deins

Eine Frage zu dieser Seite?

Frag in jeder Sprache. Die Doku kann dir sofort antworten oder deine Frage an das Team von Proxy Mail QA schicken, das auf Englisch antwortet.

Doku fragen