英語から自動翻訳されています。

英語で読む
Proxy Mail QA

Cypress でサインアップメールをテストする

Cypress でメール認証をテストするには、新しいアドレスを作成してそのメールを待つタスクをいくつか登録し、spec から呼び出します。サインアップし、リンクまたはコードを待って、フローを完了します。タスクは Node で実行されるため、proxymail-qa パッケージは他の環境と同じように動作します。Free プランで、ローカルでも CI でも動作します。

更新日:

セットアップ

proxymail-qa パッケージをインストールし、Cypress が実行される環境の PROXYMAIL_QA_API_KEY に API キー を設定します。Free プランで十分です。

npm install --save-dev proxymail-qa

タスクを登録する

cypress.config.ts
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),
});
},
},
});

テスト

cypress/e2e/signup.cy.js
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 アクション が実行中のメールのレポートもプルリクエストに投稿します。どのメールが届いたか、どれだけ速かったか、どれが届かなかったかがわかります。

.github/workflows/e2e.yml
- 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 での実行 を参照してください。

次のサインアップテストで試してみてください

無料プラン、クレジットカード不要。アドレスを作成して、コードやリンクが届くのを確かめてください。

無料アカウントを作成アプリを開く

よくある質問

cy.request ではなく cy.task を使うのはなぜですか?

待機はメールが届くまで最大 30 秒続くことがあり、パッケージが再試行、時間によるフィルター、わかりやすいエラーを処理します。タスク内では API キーを使って Node で実行され、キーがブラウザに渡ることはありません。REST API に対して cy.request を使うこともできます。

待機にはどのくらい時間がかかりますか?

通常は数秒です。メールが届くとすぐに返り、30秒で打ち切られます。Cypress のタスクのデフォルトの制限時間は60秒ですが、例では35秒に設定しているため、メールが届かない場合はより早くテストが失敗します。

メールが届かない場合は?

タスクは、Proxy Mail QA が判断できる範囲で理由を示すメッセージとともに失敗します。最も多いのは、アプリのメールプロバイダーがサンドボックスまたはテストモードになっていて、認証済みのアドレスにしか送信しない場合です。待ち時間を延ばすのではなく、送信側を修正してください。

AI ツールでアプリを作りましたか?使ったツールを選んでください

このページについて質問がありますか?

質問はどの言語でもかまいません。ドキュメントからすぐに回答を得ることも、Proxy Mail QA チームに質問を送ることもできます。チームからの返信は英語です。