Vue Composable Testing Guide (Vitest)
1. Determine Composable Type
Analyze the source code of the composable to determine the testing strategy:
- Independent: Uses only Reactivity APIs (
ref,computed,watch). Does not use Lifecycle hooks orinject. - Dependent (Lifecycle): Uses Lifecycle hooks (e.g.,
onMounted,onUnmounted). - Dependent (Injection): Uses
injectto retrieve dependencies.
2. Select Testing Strategy
A. Independent Composables
Test directly by invoking the function and asserting the returned state. No mocking of the Vue instance is required.
- Pattern: Import composable -> Call it -> Assert
result.value. - Reference: See
references/examples.md(Section: Independent)
B. Dependent Composables (Lifecycle)
Requires a component context to trigger hooks like onMounted. Use the withSetup helper function.
- Prerequisite: Ensure
test-utils.ts(or similar) exists containing thewithSetuphelper.- Action: If the helper is missing, generate it using
references/helpers.md.
- Action: If the helper is missing, generate it using
- Pattern: Import
withSetup-> CallwithSetup(() => useComposable())-> Destructure result -> Assert. - Reference: See
references/examples.md(Section: Lifecycle Dependent)
C. Dependent Composables (Injection)
Requires a provider context. Use the useInjectedSetup helper function.
- Prerequisite: Ensure
test-utils.tscontains theuseInjectedSetuphelper.- Action: If the helper is missing, generate it using
references/helpers.md.
- Action: If the helper is missing, generate it using
- Pattern: Define injection config array -> Call
useInjectedSetup-> Assert -> Call unmount(). - Reference: See
references/examples.md(Section: Injection Dependent)