MoeMail
블로그로 돌아가기

비밀번호 재설정 이메일 흐름 테스트하기

비밀번호 재설정은 망가지기 쉽고 테스트하기는 번거로운 핵심 경로입니다. 이메일로 전달되는 고유한 링크에 전적으로 달려 있기 때문이죠. 일회용 받은편지함 API로 이를 엔드투엔드로 자동화하는 방법을 소개합니다 — 개발자를 위한 이메일 테스트의 일부이며, 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 헬퍼는 Playwright 튜토리얼의 것과 같습니다. Cypress에서는 커스텀 명령을 대신 쓰세요.

다뤄 볼 만한 엣지 케이스

만료되었거나 이미 사용된 링크, 알 수 없는 이메일에 대한 재설정 요청(사용자 열거를 막으려면 응답이 동일해 보여야 합니다), 그리고 요청 제한이 있습니다. 각각 위 흐름의 간단한 변형입니다.

시작하기

메일박스를 만들고 API 키를 받은 뒤, OpenAPI 문서를 읽어 받은편지함 호출을 스위트에 끼워 넣으세요.