vue.js - 如何在没有直接访问的情况下模拟 vuex 函数?
问题描述
所以我遇到了一个相当大的测试问题。
总结:不久前我创建了一个私有 npm 模块,它管理和创建一个 vuex 存储并将其作为一个模块注入到主 vuex 存储中。
现在我想在我的测试中模拟该 vuex 模块的特定功能,但这不起作用。
我试过这个:
store.getters.getSomething = jest.fn(() => "stuff);
但这会导致此错误:
TypeError: Cannot set property getSomething of #<Object> which has only a getter
现在做了一点挖掘,我在这里你可以看到这个吸气剂来自哪里:
首先有一个简单的 vuex 模块定义:
//vuexModule this is not accessible outside of the npm module
getters:{
getSomething: (state)=>{ return "stuff"}
}
export { getters }
现在这被导入到这个类中:
//storeProvider //this is exposed by the npm package
import vuexModule from "./vuexModule";
export default class StoreProvider {
constructor(vuexStore, vuexModuleName = "someStore") {
this.vuexStore = vuexStore;
this.vuexStore.registerModule(vuexModuleName, VuexConfigStore);
}
所以这个类会使用之前定义的模块生成一个vuex模块。
现在整个东西被添加到实际应用程序的主 vuex 存储中。注意:此代码现在是实际的应用程序,而不是在 npm 包中。
import StoreProvider from "someNpmModule";
import mainStore from "vuexPlugin";
const storeProvider = new StoreProvider(store);
//later in main:
new Vue({ mainStore })
所以问题是:我如何模拟 getSomething? 我知道代码非常抽象,但我无法显示所有代码,而且对于 stackoverflow 来说可能太多了。
重点是,我可以像这样导入 getter 并模拟它:
import {getSomething} from "...";
getSomething = jest.fn(() => "stuff);
//Or this:
store.getters.getSomething = jest.fn(() => "stuff);
我发现了这个 stackoverflow 问题:Jest spyOn 期间的 TypeError: Cannot set property getRequest of #<Object> which has only a getter
但是由于 npm 包相当大,我不能只为单元测试模拟整个包,因为它提供了一些必要的先决条件。我尝试了 genMockFromModule(),但我仍然需要针对这个特定的函数。如前所述,我不能简单地导入该功能。
有任何想法吗?
解决方案
推荐阅读
- date - Google 表格中的日期格式无法按照说明工作
- linux - awk 字符串 substr 和 cut 不需要 char
- python - 按索引将即将到来的行与前一个进行比较(熊猫)
- android - 在 Android 上使用 Geckovow 发送代理身份验证请求
- c++ - C ++ URLDownloadToFile到CLR论坛中的可执行目录
- windows - Docker 推送到本地注册表失败并出现错误 500
- javascript - 从另一个 wwwroot/JS 文件中的 CSHTML 脚本标签调用 JS 函数
- c - 函数被用作指针
- log4j - 在 Log4j 中监控异步记录器队列大小
- javascript - 如果点击函数内的条件连接变量