1.我的设置
- Vue 3应用程序
- Pinia商店
- 在我的
main.ts
中:app.use(myPlugin)
- 在
MyPlugin.ts
中:我根据某些环境条件有条件地创建并向应用程序提供存储库(MyRepo
)。此存储库可以与API交互,也可以提供用于开发和测试目的的假数据。 - 在
myStore.ts
中:
defineStore('myStore', () => {
const repo = inject<MyRepoInterface>('myRepo');
// ....
})
1.我的问题
我在编写依赖于存储的测试时遇到了一个问题,而存储本身又依赖于myStore
。当在我的测试中调用inject函数时,我收到以下警告:[Vue warn]: inject() can only be used inside setup() or functional components.
此外,repo
是undefined
,导致错误。
1.我的问题
我正在寻找一个解决方案,以提供在我的测试框架(Vitest)的设置存储库。这样,我就可以在正常的应用程序运行时和运行测试时将其注入到代码中。我如何才能做到这一点?
任何批评的方式,我试图实现dependentinjection是受欢迎的。谢谢你,谢谢!
1条答案
按热度按时间bqf10yzr1#
Pinia存储是在第一次调用store函数时示例化的单例。
inject
用于Pinia存储设置功能意味着第一次使用应该在Vue组件设置或当代生命周期挂钩中,而对于Pinia存储通常没有这样的限制。用store选项代替function来定义store也是不可能的,尽管它们通常是可互换的。
一种更灵活和测试友好的方法是在store方法中使用显式依赖注入:
在App组件中: