我正在尝试使用Jest测试Vue组件,该组件利用Vuex中的吸气剂。 getter返回一个函数,该函数又返回一个数组:
questions: state => pageNumber => state.pages[pageNumber].questions
我在组件中像这样使用它:
computed: {
inputs() {
return this.$store.getters.questions(this.pageNumber);
},
},
这在呈现UI方面似乎很好,但是当尝试测试组件时,我得到了Cannot read property 'questions' of undefined
我的测试非常简单,但是我之前没有在Vuex中使用Jest,所以我可能会误解您如何测试使用吸气剂的组件:
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();
});
});
我认为这与吸气剂中的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
}
};
答案 0 :(得分:0)
在问题获取者中,您搜索的是页面数组中可能未知的索引。
由于questions: state => pageNumber => state.pages[pageNumber]
为空且state.pages
大于0,因此pageNumber
未定义。
为避免这种情况,您可以执行以下操作:
questions: state => pageNumber => {
return state.pages[pageNumber]
? state.pages[pageNumber].questions
: [] // <-- here your default value
}
您可以在测试中设置pageNumber
的值,但我不知道它是组件的属性还是数据:
有关数据:
mount(SurveyQuestionBuilder, {
store,
localVue,
data:() => ({ pageNumber: 0 })
})
对于道具:
mount(SurveyQuestionBuilder, {
store,
localVue,
propsData: { pageNumber: 0 }
})