gpt4 book ai didi

javascript - Vuex with Jest - 无法读取未定义的属性

转载 作者:搜寻专家 更新时间:2023-10-30 22:50:42 26 4
gpt4 key购买 nike

我正在尝试使用 Jest 来测试 Vue 组件,该组件在 Vuex 中使用了 getter。 getter 返回一个函数,该函数又返回一个数组:

questions: state => pageNumber => state.pages[pageNumber].questions

我在我的组件中像这样使用它:

computed: {
inputs() {
return this.$store.getters.questions(this.pageNumber);
},
},

这在渲染 UI 方面似乎工作正常,但在尝试测试组件时我得到 Cannot read property 'questions' of undefined

我的测试非常简单,但我之前没有将 Jest 与 Vuex 一起使用,所以我可能会误解您如何测试使用 getter 的组件:

import Vuex from 'vuex';
import { mount, createLocalVue } from '@vue/test-utils';
import SurveyQuestionBuilder from '../components/SurveyQuestionBuilder.vue';
import store from '../store';

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

describe('SurveyQuestionBuilder.vue', () => {
it('renders a value from $store.state', () => {
const wrapper = mount(SurveyQuestionBuilder, { store, localVue });

expect(wrapper.exists()).toBeTruthy();
});
});

我假设它与 getter 中的 pages[pageNumber] 有关,但不确定如何解决它。

Store.js 导入了几个模块:

import Vue from 'vue';
import Vuex from 'vuex';
import surveyBuilderStore from './survey_builder';
import matrixStore from './matrix';

Vue.use(Vuex);

export default new Vuex.Store({
modules: {
survey: surveyBuilderStore,
matrix: matrixStore,
},
});

有问题的模块是 surveyBuilderStore:

const surveyBuilderStore = {
state: {
pages: [],
},
getters: {
pages: state => state.pages,
questions: state => pageNumber => state.pages[pageNumber].questions,
config: state => (pageNumber, questionNumber) =>
state.pages[pageNumber].questions[questionNumber].config,
},
mutations: {
// my mutations
}
};

最佳答案

在你的问题 getter 中,你在 pages 数组中搜索可能未知的索引。

所以 questions: state => pageNumber => state.pages[pageNumber] 是未定义的,因为 state.pages 是空的,而 pageNumber 是高于 0。

要避免这种情况,您可以这样做:

questions: state => pageNumber => {
return state.pages[pageNumber]
? state.pages[pageNumber].questions
: [] // <-- here your default value
}

你可以在你的测试中设置pageNumber的值,但我不知道它是组件的 Prop 还是数据:

对于数据:

mount(SurveyQuestionBuilder, { 
store,
localVue,
data:() => ({ pageNumber: 0 })
})

对于 Prop :

mount(SurveyQuestionBuilder, { 
store,
localVue,
propsData: { pageNumber: 0 }
})

关于javascript - Vuex with Jest - 无法读取未定义的属性 <getterName>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52127313/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com