vue.js - 测试 VueX 商店

标签 vue.js jestjs vuex vue-test-utils

我正在尝试测试 VueX 商店的不同部分。我将突变、 setter/getter 等保留在单个文件(index.js)中,但不知怎的,当将该文件导入到测试文件中时它不起作用。 这是我的 VueX: Vue.use(Vuex);

Index.js

import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);


export default new Vuex.Store({
  state: {
    pickedDates:[]
  },
  mutations: {
    mutatePickedDates: (state, payload) => {
      state.pickedDates = payload;
    },
})

现在在Store.spec.js中我想测试它:

import storeConfig from '@/store/index.js'

const store = storeConfig


test('check if state is working', () =>{
    const state = {
        pickedDates: []
    }
    const dates = ['1995-01-01', '1995-01-01']
    store.mutations.mutatePickedDates(state, {dates})
    expect(state.pickedDates).toBe(dates)

})

但我收到错误:TypeError:运行测试时无法读取未定义的属性“mutatePickedDates”

最佳答案

有两种测试 vuex 的方法。第一个是对 Action 、突变和 setter/getter 进行单元测试。二是直接测试工作存储。

单元测试突变

如果您想测试从组件中分离出来的存储突变,我建议导出它们。

import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);

export const mutations = {
  mutatePickedDates: (state, payload) => {
    state.pickedDates = payload;
  }
};

export default new Vuex.Store({
  state: {
    pickedDates:[]
  },
  mutations: mutations
})

然后您可以直接导入并测试突变。

import { mutations } from '@/store/index.js'

test('check if state is working', () =>{
    const state = {
        pickedDates: []
    }
    const dates = ['1995-01-01', '1995-01-01']
    mutations.mutatePickedDates(state, dates)
    expect(state.pickedDates.length).toBe(2)
})

使用工作 Vuex 存储

import { createLocalVue } from '@vue/test-utils'
import Vuex from 'vuex'
import store from '@/store/index.js'

test('check if state is working', () =>{
    // initial state
    const state = {
        pickedDates: []
    }

    const dates = ['1995-01-01', '1995-01-01']

    // create local instance and vuex store
    const localVue = createLocalVue()
    localVue.use(Vuex)

    // commit mutation
    store.commit('mutatePickedDates', dates)

    expect(store.pickedDates.length).toBe(2)
})

关于vue.js - 测试 VueX 商店,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60549520/

相关文章:

javascript - 在 React Jest/Enzyme 中测试子组件的条件渲染

javascript - Vuex 提交 : JSON circular structure error

javascript - v-on click,仅在满足条件时添加处理程序

javascript - 除了@click,我如何使用 v-on ="$listeners"?

vue.js - vuejs - 使用带有徽章计数的 ivew 选项卡

react-native - Jest 测试失败 "Cannot find module ' images/myimage.png' from SignInOrRegister.js"with image size class @1x,@2x,@3x,@4x

node.js - jest.js 无法识别编码

javascript - NuxtJS/Vuex | nuxtServerInit 和 fetchData 操作未按状态填充用户

javascript - Vuex 突变 mutate 不 react

css - `/deep/` 选择器无法在我的 VueJS 应用程序中使用 sass-loader