我有两个组件。子组件在其值更改时会发出'input'事件,父组件使用v-model获取此值。我正在测试ChildComponent。我需要使用Vue-test-utils编写一个测试来验证它是否有效。
ParentComponent.vue:
<template>
<div>
<child-component v-model="search"></child-component>
<other-component></other-component>
...
</div>
</template>
ChildComponent.vue:
<template>
<input :value="value" @change="notifyChange($event.target.value)"></input>
</template>
<script lang="ts">
import { Component, Prop, Vue } from 'vue-property-decorator'
@Component
export default class ChildComponent extends Vue {
@Prop({ default: '' }) readonly value!: string
notifyChange(value: string) {
this.$emit('input', value)
}
}
</script>
child-component.spec.ts:
describe('ChildComponent', () => {
let wrapper: any
before(() => {
wrapper = VueTestUtils.shallowMount(ChildComponent, {})
})
it(`Should emit 'input' event when value change`, () => {
const rootWrapper = VueTestUtils.shallowMount(ParentComponent)
wrapper.vm.value = 'Value'
wrapper.findAll('input').at(0).trigger('change')
assert.isTrue(!!rootWrapper.vm.search)
})
})
我没有写完全相同的代码,但逻辑是这样的。我的组件工作正常。'child-component.spec.ts'不工作。我需要为它写一个测试。
4条答案
按热度按时间envsm3lx1#
这是一个测试emit的简单方法,如果有人正在寻找这个。在你的测试中描述一下。
My vue comp
我的 prop 在vue comp
我的方法在vue comp
b09cbbtk2#
来源:https://v1.test-utils.vuejs.org/api/wrapper/emitted.html
py49o6xq3#
这里有一个例子可以帮助你:子组件.vue
父组件.vue
关注这篇文章:https://medium.com/fullstackio/managing-state-in-vue-js-23a0352b1c87
我希望这对你有帮助。
8dtrkrch4#
在父组件中侦听发出的事件“input”
在脚本中添加get_input_value()方法