Я создаю тестовую среду для компонента, который я построил в Vue. Компонент ожидает в качестве подпорки объект, который вычисляется с помощью плагина vue на родительском элементе этого компонента. (в частности, объект $v
, который вычисляется плагином vuelidate)
Мой подход к тестированию заключался в использовании свойства parentComponent
и propsData
аргумента options vue-test-utils 'shallowMount
, но я не могу понять, как передать переменную из родительского объекта в подпорки компонента.
TextField.spec.js:
import { shallowMount, createLocalVue } from '@vue/test-utils';
import Vuelidate from 'vuelidate';
import FormField from '../../../../src/components/fields/FormField.vue';
const localVue = createLocalVue();
localVue.use(Vuelidate);
localVue.component('form-field', FormField);
parent = {
data() {
return {
value: 4,
};
},
//this property is consumed by Vuelidate, which creates an object on localVue
validations: {
value: {
required,
},
},
};
wrapper = shallowMount(FormField, {
localVue,
parentComponent: parent,
propsData: {
label: 'test label',
validatorField: $v.value,
},
});
TextField.vue
<template>
<label>
{{label}}
{{required? '*' : ''}}
</label>
</template>
<script>
export default {
props: {
label: String,
validatorField: Object,
},
computed: {
required() {
return Object.keys(this.validatorField).includes('required');
}
},
};
</script>
Ожидаемый результат приведенного выше кода для компонента FormField
для получения реквизита validatorField
, созданного из родительского элемента, но $ v не определено в контексте, который я вызываю. Я также попытался заменить validatorField: $v.value
на ":validatorField": "$v.value"
и передать функцию, но безуспешно. Есть ли способ правильно пройти эту опору? может быть, получая ссылку на parentComponent?