我正在尝试使用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
}
};
1 回答
在你的问题获取器中,你可以搜索pages数组中可能未知的索引 .
所以
questions: state => pageNumber => state.pages[pageNumber]
未定义,因为state.pages
为空且pageNumber
高于0 .为避免这种情况,您可以:
你可以在你的测试中设置
pageNumber
的值但是我没有't know if it' s组件的道具或数据:对于数据:
对于道具: