Details below are from Clerk’s documentation on 17 October 2026. Check it for current details.
What Clerk sends
- Sign-up verification: a code, or a link if you choose email links.
- Sign-in: a code or a link, when email sign-in is on.
- Password reset: a code.
- Invitations: a link, for organisation and app invitations.
Test mode skips the email
Development instances have test mode on: any address with +clerk_test (such as jane+clerk_test@example.com) verifies with the code 424242, and no code email is sent. That keeps tests fast, but nothing checks the email your users get: whether it arrives, its sender, its wording, or that the code in it works.
Development instances also cap Clerk-delivered email at 100 a month. Once it’s reached, sign-ups that need a code fail.
Test it by hand
- Create an address in Proxy Mail QA, with a persona and password if your sign-up asks for them.
- Sign up in your app with it.
- The code appears on the address’s row within seconds, with a countdown when the email says how long it lasts. Copy it into the form.
Automate it
import { test, expect } from 'proxymail-qa/playwright';
test('Clerk sign-up sends a working code', async ({ page, qa }) => {
const { address, password } = await qa.createAddress({ persona: true, password: true });
const submitted = new Date();
await page.goto('/sign-up');
await page.getByLabel('Email address').fill(address);
await page.getByLabel('Password').fill(password);
await page.getByRole('button', { name: 'Continue' }).click();
const { value } = await qa.waitForCode(address, { since: submitted });
await page.getByLabel('Enter verification code').fill(value);
await expect(page).toHaveURL(/dashboard/);
});
Match the labels to your sign-up page. Each sign-up uses one email from the development cap, so keep the +clerk_test addresses for the bulk of your suite and a real inbox for the tests about the email. More in Test sign-up emails in Playwright.