设置
安装 proxymail-qa 包,并在 Cypress 运行的环境中把 API 密钥 放进 PROXYMAIL_QA_API_KEY。Free 套餐就够了。
npm install --save-dev proxymail-qa注册 tasks
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 让等待忽略表单提交前发送的所有邮件,这样重试的测试不会读到旧邮件。根据你的应用调整选择器和路由。
检查邮件本身,而不只是链接
为你想做的检查添加任务,比如只有一封验证邮件而不是两封,或链接指向 staging:
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 secret。在 GitHub Actions 中,Proxy Mail QA action 还会在 pull request 上发布本次运行的邮件报告:哪些到了、多快,哪些一直没来。
- 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 中运行。