MoeMail
블로그로 돌아가기

매직 링크 / 비밀번호 없는 로그인 테스트하기

비밀번호 없는(매직 링크) 로그인은 사용자에게는 쾌적하지만 테스트에는 번거롭습니다. 입력할 비밀번호가 없고, 이메일로 전달되는 일회성 링크만 있기 때문이죠. 다행히 — 이것은 개발자를 위한 이메일 테스트의 다른 모든 흐름과 같은 받은편지함 읽기 패턴이며, 비밀번호 재설정 테스트와 거의 쌍둥이입니다.

흐름

  1. 일회용 받은편지함을 마련하고 그에 대한 매직 링크를 요청합니다.
  2. 메일을 읽고 로그인 URL을 뽑아냅니다.
  3. URL을 열어 인증된 세션에 도달하는지 단언합니다.

예제(Playwright)

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

const msg = await waitForMessage(inbox.id, 30000)
// 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 expect(page.getByText('Signed in')).toBeVisible()

createInbox / waitForMessage 헬퍼는 Playwright 튜토리얼에서 가져온 것입니다. Cypress 커스텀 명령도 같은 방식으로 동작합니다.

엣지 케이스

만료된 링크, 일회성 강제(두 번째 클릭은 실패해야 합니다), 그리고 알 수 없는 주소에 대한 링크 요청(사용자 열거를 막으려면 동일하게 응답하세요)이 있습니다. 각각 위 흐름의 작은 변형입니다. 두 번째 요소가 함께 얽혀 있다면 OTP·2FA 테스트와 비교해 보세요.

시작하기

메일박스를 만들고 OpenAPI 문서를 읽어 받은편지함 호출을 스위트에 연결하세요.