MoeMail
返回部落格

測試重設密碼的 email 流程

重設密碼是一條關鍵路徑,既容易壞、又難測,因為它整個卡在一個由 email 送來的唯一連結上。以下示範如何用一個拋棄式收件匣 API 把它端對端自動化——這是開發者 email 測試的一部分,也跟 OTP 與 2FA 測試魔術連結登入是近親。

流程

  1. 開一個全新收件匣,並用那個地址建立一個使用者。
  2. 對它發出重設密碼請求。
  3. 讀重設信,把連結抓出來。
  4. 打開連結、設一個新密碼,再斷言你能登入。

範例(Playwright)

const inbox = await createInbox()
await page.goto('/forgot-password')
await page.getByLabel('Email').fill(inbox.address)
await page.getByRole('button', { name: 'Send reset link' }).click()

const msg = await waitForMessage(inbox.id, 30000)
// take the first http(s) URL in the email body
const link = (msg.links && msg.links[0])
  || msg.text.split(/\s+/).find(w => w.indexOf('http') === 0)

await page.goto(link)
await page.getByLabel('New password').fill('S0me-Str0ng-Pass')
await page.getByRole('button', { name: 'Reset password' }).click()
await expect(page.getByText('Password updated')).toBeVisible()

這裡的 createInbox / waitForMessage helper 跟 Playwright 教學裡的是同一組;在 Cypress 裡則改用自訂指令。

值得涵蓋的邊界情況

已過期或已使用過的連結、對未知 email 發出重設請求(外觀應該要和正常情況一模一樣,以免洩漏使用者是否存在),以及速率限制。每一個都只是上面流程的小變形。

開始動手

建立一個郵箱、拿一把 API 金鑰,再讀讀 OpenAPI 文件,把收件匣相關呼叫接進你的測試套件。