Vue.js testing best practices, patterns, and common gotchas.
E2E Selector Stability
- Prefer
data-testidselectors for critical flows instead of visible-text selectors that depend on locale or UI copy. - Add markers in Vue components as part of feature work when a flow lacks stable hooks for Playwright.
- Keep selector ids semantic and consistent across specs; centralize reused ids in a shared selector map (for this repo:
e2e/support/selectors.ts).
Testing
- Setting up test infrastructure for Vue 3 projects -> See testing-vitest-recommended-for-vue
- Tests keep breaking when refactoring component internals -> See testing-component-blackbox-approach
- Tests fail intermittently with race conditions -> See testing-async-await-flushpromises
- Composables using lifecycle hooks or inject fail to test -> See testing-composables-helper-wrapper
- Getting "injection Symbol(pinia) not found" errors in tests -> See testing-pinia-store-setup
- Components with async setup won't render in tests -> See testing-suspense-async-components
- Snapshot tests keep passing despite broken functionality -> See testing-no-snapshot-only
- Choosing end-to-end testing framework for Vue apps -> See testing-e2e-playwright-recommended
- Tests need to verify computed styles or real DOM events -> See testing-browser-vs-node-runners
- Testing components created with defineAsyncComponent fails -> See async-component-testing
- Teleported modal content can't be found in wrapper queries -> See teleport-testing-complexity
Reference
Source: abondin/hreasy — distributed by TomeVault.