# Mountspec > Behaviour-first Vitest unit tests for one Vue 3 component, composable or Pinia store - written for you, or your > existing tests reviewed - after the agent skill @github/unit-test-vue-pinia. https://mountspec.skillsafe.ai/ > Independent tool: not affiliated with or endorsed by the Vue, Pinia or Vitest projects. ## What it does - Free, in the browser, no account: reads the pasted unit's public surface (defineProps, defineEmits, defineModel, slots, defineStore state / getters / actions, a composable's return values, the stores it uses), recommends the least powerful Pinia setup and a mount style, lints a pasted Vitest file, and exports a spec skeleton. - Pinia strategies: testing_pinia (createTestingPinia({ createSpy: vi.fn }) while mounting - the default for a component that uses a store), testing_pinia_real_actions (stubActions: false, only when the real action must run), real_pinia (setActivePinia(createPinia()) for pure store tests), active_testing_pinia (setActivePinia(createTestingPinia(...)) for stores or composables with dependent stores), none. - Lint rules: wrapper_vm, snapshot, async_update (unawaited trigger / setValue / setProps / setChecked), determinism (Date.now, Math.random without fake timers), no_assertion, mock_reset, one_behaviour, brittle_selector, implementation_detail (setData). Accepted minimal setups that are never flagged: createTestingPinia({}), createTestingPinia({ initialState }) or ({ stubActions }) without createSpy when no spy is inspected, and setActivePinia(createTestingPinia(...)) in store or composable tests. - Paid lane "write" (gpt-terra): the behaviour boundary, Pinia strategy and mount, three to ten cases named for the behaviour they prove, a complete Vitest file with one it() per case, and the gaps left open. - Paid lane "review" (gpt-terra): keep / tighten / rewrite, severity-ranked findings with rule, line, problem and fix, the accepted setups, missing coverage (handed to "write" as its focus) and brittleness risks. - Every reply is checked against the page's reading: surface ids must exist in the source, the written file is re-linted, its it() blocks must match the cases, and its Pinia setup must match the declared strategy. ## API - Tutorial with samples in eight languages: https://mountspec.skillsafe.ai/api.html - Base URL https://api.skillsafe.ai/v1/app-api - /guest, /me, /estimate (free), /run, /run-stream. - Input (all strings): task (write | review), title, source, tests (review), focus, facts (JSON string built by VueKit.buildInput in https://mountspec.skillsafe.ai/vuekit.js), retry_note. ## Sources - Agent skill: https://skillsafe.ai/skill/@github/unit-test-vue-pinia (github.com/github/awesome-copilot, skills/unit-test-vue-pinia, MIT), with its references/pinia-patterns.md. - Pinia testing cookbook: https://pinia.vuejs.org/cookbook/testing.html - Vue Test Utils guide: https://test-utils.vuejs.org/guide/