Qwik E2E Verification
Use this skill for Playwright e2e work in e2e/**. Keep the repo-wide rules from
.ruler/AGENTS.md in force.
Fast Path
- Identify the suite: Qwik core app, Qwik Router, adapters, docs, CLI, or Qwik React.
- Run the dev rebuild first when testing Qwik runtime/router behavior.
- Use the suite's Playwright config and the browser-selection style that config expects.
- Prefer one focused e2e file before broad suite commands.
- When debugging app fixtures, inspect the matching
e2e/*/apps/source before changing tests. - Turn a failing behavior into the smallest deterministic regression. Avoid sleeps and broad assertions when a route, marker, event, or serialized state check can prove the behavior.
Suites
- Main Qwik e2e:
e2e/qwik-e2e/tests/ - Router e2e:
e2e/qwik-e2e/tests/qwikrouter/ - Adapter e2e:
e2e/adapters-e2e/tests/ - Docs e2e:
e2e/docs-e2e/tests/ - CLI e2e:
e2e/qwik-cli-e2e/tests/ - React integration e2e:
e2e/qwik-react-e2e/tests/
Apps whose directory names contain .prod run in production mode under the shared Qwik dev server.
Keep exact production-only assertions in those fixtures; regular fixtures must pass after either
build.core.dev or build.core.
Commands
Main Qwik e2e config uses --browser, not Playwright projects:
pnpm build.core.dev
pnpm playwright test e2e/qwik-e2e/tests/events.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts
pnpm playwright test e2e/qwik-e2e/tests/qwikrouter/nav.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts
The brotli budget tests in ssg-snapshot.e2e.ts measure the built core chunk, so they need a
production pnpm build.core — build.core.dev leaves core unminified and blows the budget by ~4%.
Before believing a budget failure, rebuild with build.core and re-run pnpm test.e2e.router.ssg.
Playwright's reuseExistingServer: !CI means a dev server left over from an earlier run serves
stale bundles, so a local pass can hide a build break that CI catches. Kill port 3301 before
trusting a green local sweep after optimizer or bundler changes.
Other suites may use named Playwright projects. Check their config before choosing flags:
pnpm playwright test e2e/docs-e2e/tests/docs-smoke.spec.ts --config e2e/docs-e2e/playwright.config.ts --project chromium
pnpm playwright test e2e/adapters-e2e/tests/adapters.spec.ts --project=chromium --config e2e/adapters-e2e/playwright.config.ts
pnpm playwright test e2e/qwik-react-e2e/tests/reactify.spec.ts --project=chromium --config e2e/qwik-react-e2e/playwright.config.ts
SSG snapshot suite
e2e/qwik-e2e/tests/qwikrouter/ssg-snapshot.e2e.ts asserts two independent things against the built
qwikrouter-ssg-snapshot app:
- Serialized output goldens —
expected.state.txtandexpected.ssg.html. Regenerate after an intentional serialization or SSR output change withpnpm test.e2e.router.ssg.update. - Brotli size budgets —
CORE_BROTLI_BUDGET/PRELOADER_BROTLI_BUDGET/QWIKLOADER_BROTLI_BUDGETconstants in that spec. A core change that grows a bundle fails with the exact over-budget byte count; bump the matching constant when the growth is intentional.
Traps:
- The core budget is skipped after
build.core.dev; runpnpm build.coreto measure it. test.e2e.router.ssg.updateregenerates the goldens only; it never touches the budgets, so a budget breach survives the update.- The update run can exit non-zero because a sibling budget assertion failed, not the golden. "N passed" with exit 1 usually means a budget breach — read the failing assertion instead of assuming the golden is stale.
- After rebasing onto a moved base the golden conflicts; regenerate it rather than hand-merging, then
re-run
pnpm test.e2e.router.ssg(no update flag) to confirm it passes deterministically.
Stop Conditions
- Stop and inspect the suite config when
--browserversus--projectis unclear. - Stop and report if browser binaries, build artifacts, or dependencies are missing.
- Do not broaden to all e2e suites unless the user asks or the changed surface requires it.
- If a test failure shows this skill has stale suite or command guidance, update the skill before finishing or record why guidance edits were out of scope.