비밀번호 재설정 이메일 흐름 테스트하기
비밀번호 재설정은 망가지기 쉽고 테스트하기는 번거로운 핵심 경로입니다. 이메일로 전달되는 고유한 링크에 전적으로 달려 있기 때문이죠. 일회용 받은편지함 API로 이를 엔드투엔드로 자동화하는 방법을 소개합니다 — 개발자를 위한 이메일 테스트의 일부이며, 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 헬퍼는 Playwright 튜토리얼의 것과 같습니다. Cypress에서는 커스텀 명령을 대신 쓰세요.
다뤄 볼 만한 엣지 케이스
만료되었거나 이미 사용된 링크, 알 수 없는 이메일에 대한 재설정 요청(사용자 열거를 막으려면 응답이 동일해 보여야 합니다), 그리고 요청 제한이 있습니다. 각각 위 흐름의 간단한 변형입니다.
시작하기
메일박스를 만들고 API 키를 받은 뒤, OpenAPI 문서를 읽어 받은편지함 호출을 스위트에 끼워 넣으세요.