How to test a signup flow: one prompt per failure mode, no scripts
A broken signup flow fails silently — users bounce, nobody files a bug. Here's how to test signup end to end: validation, duplicate emails, enumeration, verification emails, and post-signup state, all in plain English.
How to test a signup flow: one prompt per failure mode, no scripts
Signup is the worst flow to break, for one specific reason: the people who hit the bug are, by definition, not your users yet. They don't file a ticket. They don't email support. They close the tab, and your only evidence is a dip in a conversion chart someone checks on Thursdays.
It's also one of the most bug-dense flows in a typical web app, because it touches everything at once — client validation, server validation, the database's uniqueness constraints, an email service, a session layer, and a redirect. Six systems, one form.
This is the playbook for testing all of it without writing a line of test code: what "testing signup" actually has to cover, and the plain-English prompts to cover it. The same structure we used for magic-link auth, applied to the flow that feeds it.
What "testing the signup flow" actually means
The happy path — valid email, valid password, lands on dashboard — is maybe a fifth of the surface. A real check covers:
- Input validation, both sides. Empty fields, malformed emails, weak passwords — rejected with errors a human can act on. And critically: the client and the server must agree on the rules.
- Password policy sanity. NIST SP 800-63B says passwords must be at least 8 characters and that verifiers should permit at least 64, so passphrases work. The classic shipped bug is a mismatch: client allows 200 characters, server (or its bcrypt call, which truncates input at 72 bytes) effectively doesn't. The user signs up successfully and can never log in again.
- Duplicate accounts. Signing up twice with the same email fails cleanly the second time — including with case variations (
Bob@example.comvsbob@example.com) and Gmail-style plus-aliases if you treat those as equivalent. - Account enumeration. The duplicate-email error shouldn't be a user-existence oracle. OWASP's Authentication Cheat Sheet covers this under response discrepancy: wording and timing shouldn't reveal whether an address is registered. (There's a real tension here with usability — many products deliberately accept the leak on signup and mitigate with rate limiting. The point is to decide, not to ship the leak by accident.)
- The verification email. It arrives, the link works, the link works only once, and an unverified account is in the state you intended — blocked, limited, or grace-period — not some accidental fourth state.
- Post-signup state. The session is live, the dashboard renders for a brand-new user (empty states!), and the welcome email doesn't fire twice.
- The double-submit. Two fast clicks on "Create account" make one account, not two — and not one account plus one unhandled 500.
Most teams test items 1 and 6 manually, ship, and discover items 2, 4, and 7 from production weirdness over the following year. The prompts below are ordered to catch the expensive ones first.
Prompt 1: validation, both sides of the wire
That second paragraph is the client/server mismatch test — the silent account-killer from item 2. The agent signs up and then verifies the credential round-trips. A scripted suite almost never checks this because the signup test and the login test are different files with different fixtures.
Prompt 2: duplicates and what the error reveals
Step 3 finds the case-sensitivity bug that creates two accounts for one human, which surfaces months later as "I logged in and all my data is gone." Step 4 gives you the evidence to make the enumeration call from item 4 deliberately — wording and timing, recorded, per OWASP's guidance.
Prompt 3: the verification email
Same setup requirement as the magic-link playbook: a test inbox the agent can read — a catch-all domain or a hosted inbox service — passed in via your scenario config rather than hardcoded.
Step 2 is the one that finds real product bugs: the unverified user who can somehow reach billing, or the opposite — the unverified user stuck on a dead-end page with no resend button at all.
Prompt 4: post-signup state and the double-submit
New-user empty states are the most under-tested screens in SaaS, because everyone on the team has a ten-month-old account full of data. The agent's account is always brand new — that's an advantage no fixture-seeded test suite has. (It's the same reason agents catch the bugs scripts miss in general; the longer argument is here.)
Reading the results
Each run comes back as a session, not a pass/fail bit: screenshots at every step, the network log with the actual signup POST and its response, console output, and the agent's reasoning where it made a judgment call. The triage habit that pays off: read the network log even when the run passes — signup flows love to swallow a failed analytics call or a 500 from the welcome-email service without telling the UI. The run docs cover pulling session details; how to test a web app without writing code covers the general read-the-session workflow if this is your first rodeo.
Make it a habit, not an audit
Four prompts, roughly two to four minutes of agent time each, a few cents per run. The leverage isn't in running them once — it's in running them on every deploy that touches auth, accounts, email, or the dashboard shell, which in a young codebase is most deploys. Save each prompt as a Test Scenario, pin them to your staging Project, and wire them into CI against every preview deploy.
The prompts survive your redesigns, because nothing in them references a selector, an ID, or a DOM path. Rename the button, move the form, add a step — the intent didn't change, so the test didn't either.
The one to run right now
If you only run a single check today, run the credential round-trip — it's the cheapest test with the worst failure mode:
Your first run on Monito is free — point it at staging, paste the prompt, read the session. If it comes back clean, you've earned the Thursday conversion chart looking boring.