測試重設密碼的 email 流程
重設密碼是一條關鍵路徑,既容易壞、又難測,因為它整個卡在一個由 email 送來的唯一連結上。以下示範如何用一個拋棄式收件匣 API 把它端對端自動化——這是開發者 email 測試的一部分,也跟 OTP 與 2FA 測試、魔術連結登入是近親。
流程
- 開一個全新收件匣,並用那個地址建立一個使用者。
- 對它發出重設密碼請求。
- 讀重設信,把連結抓出來。
- 打開連結、設一個新密碼,再斷言你能登入。
範例(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 文件,把收件匣相關呼叫接進你的測試套件。