我正在使用Buefy CSS框架,该框架提供了自定义的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>
我的测试代码中的Expect语句应该通过,因为当我使用<input>
标记而不是<b-input>
时它会通过。但是,在<b-input>
数据属性上触发name
的'input'事件没有任何作用。
有人知道我如何正确地加<b-input>
标签,以便我可以像<input>
标签一样对其进行测试吗?
答案 0 :(得分:0)
我希望这会有所帮助。我意识到,当对它进行存根时,将更改组件的名称,并在末尾添加-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。