用途:为 Vue 3 + TypeScript + Vitest + Pinia 代码库创建或审查单元测试,覆盖组件、组合式函数(composables)与 Pinia store。工作流:先确认行为边界(组件 UI、composable 或 store 行为),选择能证明该行为的最窄测试方式,配置覆盖场景所需的最小 Pinia 能力,通过 props、表单更新、按钮点击、子组件 emit、store API 等公共输入驱动测试,先断言可观察输出与副作用。核心规则:每个测试只测一个行为;优先断言渲染文本、emit 事件、回调调用、store 状态变化等可观察行为;避免与实现耦合的断言;仅在无合理 DOM、prop、emit 或 store 级断言时才用 wrapper.vm;在 beforeEach() 中显式设置并每次重置 mock;以 references/pinia-patterns.md 为本地标准依据。Pinia 测试:组件测试默认在 mount 时以全局插件使用 createTestingPinia,默认 createSpy: vi.fn,actions 默认被 stub 并 spy;stubActions: true 用于只验证 action 是否被调用;也可接受 createTestingPinia({})、带 initialState 或 stubActions 而无 createSpy、以及在 store/composable 测试中用 setActivePinia(createTestingPinia(...))。仅当需验证 action 真实行为时才用 stubActions: false。可用 initialState 预置状态,或用 plugins 注入 Pinia 插件。纯 store 测试优先用 createPinia() + setActivePinia。Vue Test Utils:默认 shallow mount,集成行为才全量挂载;通过 props、类用户交互、emitted 事件驱动;子 stub 事件用 findComponent(...).vm.$emit(...);异步更新才用 nextTick;用 wrapper.emitted(...) 断言事件与载荷。约束:不测私有实现细节,不滥用快照,避免随机数据,测试名描述行为,审查时明确指出缺失覆盖、脆弱选择器与实现耦合断言。输出约定:创建或更新时返回测试代码及所选 Pinia 策略简述;审查时先给具体发现,再列缺失覆盖或脆弱风险。参考资料:references/pinia-patterns.md、Pinia 测试 cookbook https://pinia.vuejs.org/cookbook/testing.html、Vue Test Utils 指南 https://test-utils.vuejs.org/guide/。
unit-test-vue-pinia
测试与质量
更新于 10-15 21:52