Javascript 无法使用Cypress获取vuex状态

Javascript 无法使用Cypress获取vuex状态,javascript,vue.js,vuex,cypress,quasar-framework,Javascript,Vue.js,Vuex,Cypress,Quasar Framework,我跟在后面。window.app属性在按照描述添加代码后确实会出现在控制台中,但是我不能引用博客中提到的app.$storeans(类似于在组件中引用存储的方式)。我可以引用app.store,它确实包含vuex应用商店的属性,但它不包含app.store.state,只包含getter(和dispatches等) 例如,使用const getStore=()=>cy.window().its('app.store')它给出: 我更希望能够直接使用状态变量,而不仅仅是我做了一个getter之后

我跟在后面。window.app属性在按照描述添加代码后确实会出现在控制台中,但是我不能引用博客中提到的
app.$store
ans(类似于在组件中引用存储的方式)。我可以引用
app.store
,它确实包含vuex应用商店的属性,但它不包含
app.store.state
,只包含getter(和dispatches等)

例如,使用
const getStore=()=>cy.window().its('app.store')
它给出:

我更希望能够直接使用状态变量,而不仅仅是我做了一个getter之后。发生了什么?这是因为我在vuex应用商店中使用名称空间吗

编辑: 这也可能与我将商店分配给窗口的方式有关。我使用的是Quasar框架,在当前版本(>0.15)中,它根据它使用的
Quasar.conf.js
文件中的设置进行了大量配置。我通过将此代码添加为以下代码来分配门店:

这样做确实给了我我提到的
app.store
,但不是
app.store
(包括
状态
)。Quasar配置生成并显示在一个文件中,添加此插件后,该文件包含:

/**
 * THIS FILE IS GENERATED AUTOMATICALLY.
 * DO NOT EDIT.
 *
 * You are probably looking on adding initialization code.
 * Use "quasar new plugin <name>" and add it there.
 * One plugin per concern. Then reference the file(s) in quasar.conf.js > plugins:
 * plugins: ['file', ...] // do not add ".js" extension to it.
 **/
import './quasar'
import Vue from 'vue'
Vue.config.productionTip = false
import 'quasar-app-styl'
import 'src/css/app.styl'
import App from 'src/App'
import router from 'src/router'
import store from 'src/store'

const app = {
  el: '#q-app',
  router,
store,
  ...App
}

const plugins = []

import pluginCypress_vuex_store from 'src/plugins/cypress_vuex_store'
plugins.push(pluginCypress_vuex_store)

import pluginVuelidate from 'src/plugins/vuelidate'
plugins.push(pluginVuelidate)

plugins.forEach(plugin => plugin({ app, router, store, Vue }))

new Vue(app)
/**
*此文件是自动生成的。
*不要编辑。
*
*您可能正在考虑添加初始化代码。
*使用“quasar新插件”并将其添加到那里。
*每个关注点一个插件。然后参考quasar.conf.js>插件中的文件:
*插件:['file',…]//不要向其添加“.js”扩展名。
**/
导入“./类星体”
从“Vue”导入Vue
Vue.config.productionTip=false
导入“类星体应用程序styl”
导入'src/css/app.styl'
从“src/App”导入应用程序
从“src/路由器”导入路由器
从“src/store”导入存储
常量应用={
el:“#q-app”,
路由器,
商店,
…应用程序
}
常量插件=[]
从“src/plugins/cypress\u vuex\u存储”导入pluginCypress\u vuex\u存储
插件推送(插件推送存储)
从“src/plugins/vuelidate”导入pluginVuelidate
plugins.push(pluginVuelidate)
forEach(plugin=>plugin({app,router,store,Vue}))
新Vue(应用程序)

正如您所见,插件是Vue应用程序初始化的一部分,而博客和您建议的方式是在Vue初始化后附加的。由于Quasar自动生成配置,我不知道如何在初始化后执行'window.app=app',以查看这是否会导致我的问题…

在我的Vue应用程序上也是如此。看到这个了吗

在编写测试之前,我们需要决定如何访问存储引用。为了允许通过Vue实例测试和控制应用程序,我更喜欢在window对象上保留对组件的引用。在app.js中,将window.app设置为可测试性

const-app=新的Vue({
商店,
el:“.todoapp”
//
})
window.app=app
最后一行是关键,当我添加测试代码按照公布的方式工作时

注意,要调整的文件可能是main.js,而不是app.js


Quasar-特殊应用程序插件:Boot Ref,通过生成此特殊插件,然后将其更改为

导出默认值({app,Vue})=>{
//在这里做一些逻辑。。。
//…然后,启动我们的Quasar网站/应用程序:
window.app=新的Vue(应用程序)
//“应用程序”的一切都是由Quasar CLI制作的,
//此时不需要向其注入任何东西
}

注意,这不是一个标准的quasar应用程序插件。

我已经尝试过了。当我使用类星体框架时,这需要以不同的方式进行。也许这就是我的问题所在。我在我的问题中添加了一个编辑来提供更多的细节。啊,我想这个特殊的应用程序插件:Boot是后来添加的!很有效,太棒了!谢谢!为了在Dev中拥有这个属性,我做了:
export default({app,Vue})=>{if(window.Cypress){window.app=new-Vue(app)}else{const-Vue=new-Vue(app)Vue()}
在正常(非Cypress)浏览器中工作,但会出现错误:'boot.js?5fa4:7未捕获类型错误:Vue不是webpack_exports.a的函数(boot.js?5fa4:7);(当我刚刚做
new-Vue(app)
时,我得到一个linting错误,它说“不要使用'new'来产生副作用,没有新的”。这使它完全按照我希望的方式工作,没有任何错误:
导出默认值({app,Vue})=>{if(window Cypress){window app new Vue(app)}else{(()=>new Vue(app))}
值得一提的是,在非类星体Vue应用程序中也会出现linting错误。我使用
/*eslint disable no new*/
来清除它。
/**
 * THIS FILE IS GENERATED AUTOMATICALLY.
 * DO NOT EDIT.
 *
 * You are probably looking on adding initialization code.
 * Use "quasar new plugin <name>" and add it there.
 * One plugin per concern. Then reference the file(s) in quasar.conf.js > plugins:
 * plugins: ['file', ...] // do not add ".js" extension to it.
 **/
import './quasar'
import Vue from 'vue'
Vue.config.productionTip = false
import 'quasar-app-styl'
import 'src/css/app.styl'
import App from 'src/App'
import router from 'src/router'
import store from 'src/store'

const app = {
  el: '#q-app',
  router,
store,
  ...App
}

const plugins = []

import pluginCypress_vuex_store from 'src/plugins/cypress_vuex_store'
plugins.push(pluginCypress_vuex_store)

import pluginVuelidate from 'src/plugins/vuelidate'
plugins.push(pluginVuelidate)

plugins.forEach(plugin => plugin({ app, router, store, Vue }))

new Vue(app)