Skip to content

Commit c20f859

Browse files
committed
test(e2e/router): exercise both router strategies
Add a parameterised e2e suite that runs the same 22 scenarios against both router implementations (Navigation API and legacy History API). The legacy strategy is forced on via `window.__VP_USE_LEGACY_ROUTER__`, set via Playwright `addInitScript` on a second browser context — the shared browser and default `page` / `goto` from vitestSetup.ts are reused for the Navigation API run, so we don't relaunch Playwright. Scenarios covered, for each mode: - strategy selection reflects the flag - link click performs SPA navigation (no full reload) - hash anchor updates URL, scrolls into view, focuses target heading - back / forward navigate between entries - scroll position restored on back traversal - onBeforeRouteChange / onAfterRouteChange fire for full and hash navs - onBeforeRouteChange returning false cancels the nav - programmatic router.go - router.go with { replace: true } - same-URL click scrolls without pushing a new history entry - onBeforePageLoad / onAfterPageLoad fire - onBeforePageLoad returning false cancels page load - links inside .vp-raw trigger a full reload - external / download / target / non-HTML links are not intercepted - clicks on buttons inside links are not intercepted - route.path / route.hash / route.query stay in sync - unknown paths fall back to the 404 page - route.data.relativePath is populated from the loaded page A small init-script-installed `resolveRouterOrThrow()` finds the router via the Vue app's provides, so `page.evaluate` call sites stay terse and typed against the public `Router` interface — no `any` in test code. To support the flag, `hasNavigationApi()` now honours `window.__VP_USE_LEGACY_ROUTER__` as a forced opt-out; this is documented in-source as a test-only hook.
1 parent 225f8fb commit c20f859

2 files changed

Lines changed: 561 additions & 1 deletion

File tree

0 commit comments

Comments
 (0)