如何在带有 vuetify 和 vuex 的 Vuejs 项目中使用 Jest?节点模块和 Vuetify 问题

Posted

技术标签:

【中文标题】如何在带有 vuetify 和 vuex 的 Vuejs 项目中使用 Jest?节点模块和 Vuetify 问题【英文标题】:How to use Jest in a Vuejs project with vuetify and vuex? node modules and vuetify problems 【发布时间】:2020-11-09 23:56:07 【问题描述】:

我目前正在使用 Jest 测试一个使用 Vuex 和 Vuetify 的 Vue 项目。在任何组件上测试某些东西时,它给了我一堆这种性质的错误:

console.error node_modules/vue/dist/vue.runtime.common.dev.js:621
[Vue warn]: Error in created hook: "TypeError: Cannot read property 'dispatch' of undefined"

found in

---> <DashboardSlots>
       <StatusDashboard>
         <Root>


console.error node_modules/vue/dist/vue.runtime.common.dev.js:1884
    TypeError: Cannot read property 'dispatch' of undefined   
        at VueComponent.mappedAction (D:\Users\ftg\git\DVBIP_GATEWAY_9\usr\nonius\webadmin\node_modules\vuex\dist\vuex.common.js:1052:34)
        at VueComponent.created (D:\Users\ftg\git\DVBIP_GATEWAY_9\usr\nonius\webadmin\src\components\DashboardSlots.vue:197:1)


console.error node_modules/vue/dist/vue.runtime.common.dev.js:621
        [Vue warn]: Unknown custom element: <v-card> - did you register the component correctly? For recursive components, make 
    sure to provide the "name" option.
        
        found in
        
        ---> <DashboardSlots>
               <StatusDashboard>
                 <Root>

还有更多!我不知道为什么会这样。

这是我的 jest.config.js 文件:

module.exports = 
  verbose: true,
  roots: ["<rootDir>/src/", "<rootDir>/test/"],
  moduleFileExtensions: ['js', 'vue'],
  moduleNameMapper: 
    '^@/(.*)$': '<rootDir>/src/$1',
  ,
  transform: 
    "^.+\\.js$": "babel-jest",
    "^.+\\.vue$": "vue-jest",
  ,
  snapshotSerializers: [
    "<rootDir>/node_modules/jest-serializer-vue"
  ]

这是我的 babel.config.js 文件:

module.exports = 
  presets: [
    [
      '@babel/preset-env',
      
        targets: 
          node: 'current',
        ,
      ,
    ],
  ],
;

这是我的简单测试(只是打印一些东西):

import Component from '@/components/StatusDashboard.vue';
import  mount , createLocalVue  from '@vue/test-utils'
import Vuex from 'vuex'
import Vuetify from 'vuetify';
import Actions from '@/vuex/actions.js'

const localVue = createLocalVue();
localVue.use(Vuex);
localVue.use(Vuetify, );

localVue.use(Vuex)

describe('Component test', () => 

  it('check test', () => 
    const wrapper = mount(Component)
    const test = wrapper.vm.items
    console.log(test);
  )
)

尝试卸载节点模块并重新安装但没有解决。

【问题讨论】:

【参考方案1】:

您已设置 localVue,但尚未将其作为 option 传递给 mount()

应该是:

mount(Component,  localVue )

//or
shallowMount(Component,  localVue )

【讨论】:

以上是关于如何在带有 vuetify 和 vuex 的 Vuejs 项目中使用 Jest?节点模块和 Vuetify 问题的主要内容,如果未能解决你的问题,请参考以下文章

Vuetify 使用带有 Vuex 的 API 的外部数据的数据表

VueJS + Vuex + Vuetify 导航抽屉

Vuetify 组合框项目模板未使用 vuex 更新

如何在 Vuetify 组件中使用 Vue v-model 绑定以及计算属性和 Vuex?

Vuetify 在明暗主题之间切换(使用 vuex)

切换 Vuetify 导航抽屉 v-modeled 到 Vuex 变量