在 React 中测试邮箱变更流程,避免链接混淆

修改账户邮箱看起来是一件小事,但实际上它是测试错误的主要来源。

测试人员经常会混淆确认链接。一个人更新了地址,而另一个人先打开了邮件。这会造成混乱。团队开始争论是 React 页面坏了,还是链接属于错误的用户。

这个问题之所以发生,是因为团队将收件箱视为一种共享工具。你必须将收件箱视为功能契约的一部分。

邮箱变更流程非常脆弱。它们会改变一个活跃的账户。用户已经登录。待处理邮箱状态与已确认邮箱状态之间往往存在竞态条件。

常见问题包括:

  • 确认邮件到达共享收件箱,无法进行追踪。
  • 即使链接已确认新请求,UI 仍显示旧数据。
  • 后端已更新,但前端缓存仍显示旧地址。
  • 一名测试人员点击了本属于另一人的链接。

共享邮箱会让寻找 Bug 原因变得困难。请为每次测试运行使用唯一的临时(burner)邮箱地址,而不是使用单一的 staging 别名。

请遵循以下清晰的步骤:

  • 创建一个测试用户。
  • 在 React 设置界面请求变更邮箱。
  • 通过真实的后端路径发送邮件。
  • 将邮件路由到仅属于本次测试的收件箱。
  • 打开链接并验证设置界面是否已使用新地址刷新。

这能保持权属清晰。你会清楚地知道哪个链接来自哪个用户。

对于 React 应用,请遵循一条额外的规则:仅在重新读取数据后才对页面进行断言。不要信任乐观客户端状态(optimistic client state)。即使 mutation 返回了成功,如果后端没有完成变更,页面重新加载后仍可能带回旧值。

一个良好的端到端测试必须验证以下几点:

  • 邮件发送到了待处理地址,而不是旧地址。
  • 链接指向正确的环境主机。
  • 链接更新了账户记录。
  • 重新获取数据(refetch)后,旧地址消失。
  • 重复使用同一个链接时能安全失败。

如果你的 React query 缓存或客户端存储(client store)已过期,功能看起来就像坏了一样。客户只关心设置界面显示的是否是真实情况。

你还应该为每个请求添加一个关联 ID(correlation ID)。这有助于你追踪从用户发起请求、邮件投递到最终确认的整个过程。

隔离的收件箱不能取代单元测试。使用单元测试进行表单验证和 API 错误测试。使用收件箱流程来证明真实的客户路径在所有系统中都能正常工作。

在发布账户设置的变更之前,请检查以下项目:

  • 从真实的 React UI 请求变更。
  • 确认邮件进入了特定于本次运行的收件箱。
  • 验证重新获取数据后显示了新地址。
  • 确保旧链接无法被重复使用。
  • 确认审计日志显示了是谁发起的变更。

这可以防止那些在隔离环境下看起来一切正常,但在现实世界中却会失败的 Bug。

Source: https://dev.to/ryanlee91/how-to-test-email-change-flows-in-react-without-mixing-up-confirmation-links-4eii