Я создаю новый компонент Vue, который использует получатель имен Vuex с пространством имен для доступа к списку имен столбцов. Фактический компонент компилируется и запускается.
В моих модульных тестах Mocha я создал фиктивный геттер, который возвращает список строк с именем "allColumns". Когда я запускаю модульные тесты, во время ShallowMount методы компонента пытаются получить доступ к this.allColumns во время инициализации, но значение всегда неопределено. Я вижу нужное значение в этом. $ Store.getters.allColumns, но оно не отображается на this.allColumns, как при открытии страницы в браузере.
Существует много информации о том, как макетировать геттеры в тесте и как использовать mapGetters с пространством имен, но я не нашел никакой документации о геттерах с пространством имен в тесте Mocha.
test.spec.js
let propsData;
let getters;
let store;
beforeEach(() => {
debugger;
propsData = {
players: samplePlayerObject,
metadata: sampleMetadataObject
};
getters = {
allColumns: () => ["playerid","last","first","birthday","height"]
}
store = new Vuex.Store({
getters
});
})
it('initializes the component', () => {
const wrapper = shallowMount(PlayerFilterTable, { propsData, localVue, store });
});
компонент Vue
<template>
<div class="player-filter-table">
<table>
<tr>
<th v-for="(key, index) in GetColumns()"
v-bind:id="'header-' + key"
v-bind:key="index"
@click="HeaderClick(key)"
>...</th>
</tr>
</table>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
export default {
computed: {
...mapGetters({
allColumns: 'playerFilter/allColumns'
})
},
GetColumns() {
// this.allColumns is defined when running in browser, but undefined when loaded from a Mocha test
return this.allColumns.filter(column => [*some filter criteria*]);
}
</script>
Когда shallowMount запускается в test.spec.js, я ожидаю, что компонент успешно загрузится, а затем продолжит выполнение моих тестов, но вместо этого я получаю сообщение об ошибке TypeError: Невозможно прочитать свойство filter из undefined, потому что это. allColumns не определена.