SKILL.md
SKILL.mdBrowse 1 file
4,546 bytes
Token encoding: o200k_base
Snapshot 638f809
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.
Discovery context
Discovered by repository scan. No exact path reference found in the snapshot’s root AGENTS.md.