Как протестировать пользовательские компоненты CSS Framework с помощью vue-test-utils
Я использую Buefy CSS Framework, который предоставляет пользовательские компоненты vue-js, такие как <b-input>
а также <b-table>
и я столкнулся с проблемой тестирования <b-input>
тег.
import { shallowMount, createLocalVue } from '@vue/test-utils'
import BInputPractice from '../BInputPractice.vue'
import Buefy from 'buefy'
const localVue = createLocalVue()
localVue.use(Buefy)
describe('b-input Practice', () => {
it('updates the name data property', () => {
const wrapper = shallowMount(BInputPractice, {
localVue,
stubs: {
'b-input': Buefy.Input
}
})
const input = wrapper.find('input')
input.element.value = 'a name'
input.trigger('input')
expect(wrapper.vm.name).toBe('a name')
})
})
<!-- BInputPractice.vue -->
<template>
<div>
<b-input v-model="name"></b-input>
<!-- <input v-model="name"> -->
</div>
</template>
<script>
export default {
data() {
return {
name: ''
}
}
}
</script>
Ожидаемый оператор в моем тестовом коде должен пройти так же, как и при использовании <input>
тег вместо <b-input>
, Тем не менее, запуск события "ввода" на <b-input>
ничего не делает для name
свойство данных.
Кто-нибудь знает, как я могу правильно заглушить <b-input>
тег, чтобы я мог проверить это точно как <input>
тег?
1 ответ
Я надеюсь, что это поможет немного. Я понял, что когда заглушка, имя компонента меняется и -stub
добавляется в конце.
Так что, если вы заглушки b-input
это будет называться b-input-stub
когда используешь:
const wrapper = shallowMount(BInputPractice, { stubs: ['b-input'] })
Я не думаю, что вам нужно использовать localView
а также stubs
в то же время. Также вы можете использовать setData (data) для установки данных компонента.
expect(wrapper.find('b-input-stub').exists()).toBeTruthy()
wrapper.setData({ name: 'a name' })
expect(wrapper.vm.name).toEqual('a name')
Здесь trigger('input')
запускать не нужно, потому что вы не указали, что делать @input.native
в b-input
как в шаблоне:
<b-input @input.native="updateName" v-model="name"> </b-input>
И внутри экспорта по умолчанию в вашем скрипте.
methods: {
updateName: function () {
this.$emit('nameUpdate', this.name)
}
}
Однако, чтобы установить и проверить значение пользовательских компонентов, таких как b-input
Я бы сослался на vuejs / vue-test-utils.