本页由英文自动翻译。

阅读英文版
Proxy Mail QA

在 Cypress 中测试注册邮件

要在 Cypress 中测试邮箱验证,注册几个任务,用于创建新地址并等待其邮件,然后在 spec 中调用:注册,等待链接或验证码,完成流程。任务在 Node 中运行,所以 proxymail-qa 包和在其他地方一样可用。Free 套餐即可运行,本地和 CI 中都行。

更新于

设置

安装 proxymail-qa 包,并在 Cypress 运行的环境中把 API 密钥 放进 PROXYMAIL_QA_API_KEY。Free 套餐就够了。

npm install --save-dev proxymail-qa

注册 tasks

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 让等待忽略表单提交前发送的所有邮件,这样重试的测试不会读到旧邮件。根据你的应用调整选择器和路由。

检查邮件本身,而不只是链接

为你想做的检查添加任务,比如只有一封验证邮件而不是两封,或链接指向 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 上发布本次运行的邮件报告:哪些到了、多快,哪些一直没来。

.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.task 而不是 cy.request?

等待最多可持续 30 秒,直到邮件到达;包会处理重试、时间过滤和清晰的错误信息。在任务中,它带着你的 API 密钥在 Node 中运行,密钥永远不会到达浏览器。也可以用 cy.request 调用 REST API。

等待需要多久?

通常几秒钟:邮件一到就返回,30 秒后放弃。Cypress 默认允许任务运行 60 秒;示例设为 35 秒,这样邮件没到时测试会更快失败。

如果邮件一直不到怎么办?

任务会失败,并尽 Proxy Mail QA 所知说明原因:最常见的是应用的邮件服务商处于沙盒或测试模式,只向已验证的地址发送。请修复发送端,而不是等更久。

你的应用是用 AI 工具构建的?选择你的工具

对本页有疑问?

可以用任何语言提问。文档可以立即回答,你也可以把问题发给 Proxy Mail QA 团队,他们会用英文回复。