Предположим, что базовая c Bootstrap управляемая HTML форма является частью пользовательского Vue компонента MyForm.vue
<template>
<form>
<div class="form-group">
<label for="email">Email address</label>
<input type="email" class="form-control" id="email">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</template>
Юнит-тест для тестирования если шаблон успешно отрисован, это довольно просто
describe('MyForm', () => {
let wrapper;
beforeEach(...);
it('Should be rendered', () => {
let field = wrapper.find('#email');
expect(field.element.value).toEqual('');
});
});
Эта строка работает field.element.value
работает, потому что field.element
имеет собственный тип HtmlInputElement
с атрибутом value
.
Что если Я хочу получить доступ к атрибуту сложного компонента, скажем, о b-form-input , элементе ввода по умолчанию Bootstrap - Vue? b-form-input
имеет тип BFormInput
как с этим бороться? Просто приведите HtmlElement
к BFormInput
?
<template>
<b-form>
<b-form-group label="Email">
<b-form-input type="email" id="email"></b-form-input>
</b-form-group>
<b-button type="submit" variant="primary">Submit</button>
</b-form>
</template>
Как протестировать не собственные компоненты? Специально со средствами безопасности типов TypeScript. Есть идеи?
Редактировать 03/01/2020
После ответа muka.gergely Я нашел this статья. shallowMount
по умолчанию заглушает все дочерние компоненты, что предотвращает также обработку событий. Более того, shallowMount
позволяет вручную отстегивать компоненты, в моем случае - отменить вставку b-form
и b-button
для отправки проверки событий.
const stubs = { // Originally intended to provide custom stubs, here used to unstub components
BButton,
BForm,
};
wrapper = shallowMount<MyComponent>(MyComponent, {stubs});
Это приводит к тому, что эти компоненты отображаются вместо окурок. Все остальные компоненты, такие как b-form-input
, по-прежнему автоматически заглушаются.