セットアップ
proxymail-qa パッケージをインストールし、Cypress が実行される環境の PROXYMAIL_QA_API_KEY に API キー を設定します。Free プランで十分です。
npm install --save-dev proxymail-qaタスクを登録する
import { defineConfig } from 'cypress';import { ProxyMailQA } from 'proxymail-qa';
export default defineConfig({ e2e: { setupNodeEvents(on) { const qa = new ProxyMailQA(); // reads PROXYMAIL_QA_API_KEY on('task', { createAddress: () => qa.createAddress({ persona: true }), waitForLink: ({ address, since }: { address: string; since: string }) => qa.waitForLink(address, { type: 'verify', since }), waitForCode: ({ address, since }: { address: string; since: string }) => qa.waitForCode(address, { since }), deleteAddress: (address: string) => qa.deleteAddress(address).then(() => null), }); }, },});テスト
it('verifies the email', () => { cy.task('createAddress').then(({ address }) => { const since = new Date().toISOString(); cy.visit('/signup'); cy.get('[name=email]').type(address); cy.contains('Sign up').click(); cy.task('waitForLink', { address, since }, { timeout: 35000 }).then(({ value }) => cy.visit(value)); cy.task('deleteAddress', address); });});コードの場合は、同じように waitForCode タスクを呼び出し、その value をフォームに入力します。since を指定すると、フォーム送信前に送られたメールは待機の対象外になるため、テストを再試行しても古いメールを読むことはありません。セレクターとルートはアプリに合わせてください。
リンクだけでなくメールも確認する
確認したい項目のタスクを追加します。たとえば、認証メールが2通ではなく1通であることや、リンクの行き先がステージング環境であることなどです。
countEmails: ({ address, since }: { address: string; since: string }) => qa.countEmails(address, { since, type: 'link' }),checkEmail: ({ address, since }: { address: string; since: string }) => qa.checkEmail(address, { since, type: 'link', expectHost: 'staging.example.com' }),checkEmail は SPF、DKIM、DMARC、localhost や平文の http へのリンク、リンクの行き先などについての判定を返します。メール自体は返しません。その failed リストが空であることをアサートしてください。
CI で実行する
キーを PROXYMAIL_QA_API_KEY という名前の CI シークレットとして保存します。GitHub Actions では、Proxy Mail QA アクション が実行中のメールのレポートもプルリクエストに投稿します。どのメールが届いたか、どれだけ速かったか、どれが届かなかったかがわかります。
- uses: aaquib90/proxymail-qa-action@v1 with: api-key: ${{ secrets.PROXYMAIL_QA_API_KEY }} - run: npx cypress run env: PROXYMAIL_QA_API_KEY: ${{ secrets.PROXYMAIL_QA_API_KEY }}詳しくは Cypress ドキュメント、Node.js クライアント、CI での実行 を参照してください。