在Setup语法中自定义Pinia Store的$reset方法导致Vitest测试失败
修复Pinia Setup语法Store的$reset测试报错问题
问题根源
测试中初始化Pinia时,没有给Pinia实例注册你自定义的resetStore插件,导致Setup语法创建的Store没有挂载$reset方法,触发Pinia原生的错误提示。
解决方案
1. 在测试的Pinia初始化中注入插件
修改测试文件里的beforeEach逻辑,给createPinia()添加resetStore插件,和项目主文件的配置保持一致:
// 先导入你的自定义插件 import resetStore from '@/plugins/resetStore'; import { setActivePinia, createPinia } from 'pinia'; beforeEach(() => { // 创建带插件的Pinia实例并激活 setActivePinia(createPinia().use(resetStore)); });
这样每次测试前初始化的Pinia都会给Store挂载$reset方法,调用时就不会报错了。
2. 封装测试用Pinia创建函数(可选,优化复用)
如果多个测试文件都需要用到带插件的Pinia,可以封装一个复用函数:
// 比如在tests/utils/pinia.ts import { createPinia } from 'pinia'; import resetStore from '@/plugins/resetStore'; export function createTestPinia() { return createPinia().use(resetStore); }
然后在测试文件里使用:
import { setActivePinia } from 'pinia'; import { createTestPinia } from '@/tests/utils/pinia'; beforeEach(() => { setActivePinia(createTestPinia()); });
3. 全局配置(可选,适用于所有测试)
如果想让所有测试都自动使用带插件的Pinia,可以在Vitest的全局设置文件(比如tests/setup.ts)里添加:
import { setActivePinia, createPinia } from 'pinia'; import resetStore from '@/plugins/resetStore'; beforeEach(() => { setActivePinia(createPinia().use(resetStore)); });
然后在vite.config.ts的test配置里指定这个设置文件:
export default defineConfig({ test: { setupFiles: ['./tests/setup.ts'], }, });
这样所有测试文件都不用单独初始化Pinia,自动使用带插件的实例。
内容的提问来源于stack exchange,提问作者Scrub
相关产品推荐
相关产品推荐

