测试VueX商店

时间:2020-03-05 16:04:32

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

我正在尝试测试VueX商店的不同部分。我在单个文件(index.js)中保留了变异,getter和其他信息,但是当将该文件导入测试文件时,它不起作用。 这是我的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: Cannot read property 'mutatePickedDates' of undefined

1 个答案:

答案 0 :(得分:2)

有两种测试vuex的方法。第一个是对动作,变异和吸气剂进行单元测试。其次是直接测试工作商店。

单元测试突变

如果您要测试与组件分离的存储突变,建议您导出它们。

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)
})