vue.js - 如何测试包含 v-text-field Vuetify 子组件的 vue 组件?
问题描述
我有一个“EditableText”组件,它显示常规文本,单击该组件时会转换为 vuetify v-text-input 组件(在编辑卡片标题时有点像 trello 的功能)。
<template>
<div class="editableText">
<div v-if="!editMode" @click="editMode = true" class="editableText__text" :class="textClass">
{{ this.value }}
</div>
<v-text-field
v-else
class="editableText__input no-label"
:class="textClass"
:value="value"
:autofocus="true"
:height="20"
:single-line="true"
:hide-details="true"
@input="handleInput"
@blur="editMode = false"
/>
</div>
</template>
<script>
export default {
data() {
return {
editMode: false
}
},
props: {
value: {
type: String,
required: true
},
textClass: {
type: String,
default: ''
}
},
methods: {
handleInput(value) {
this.$emit('input', value)
}
}
}
</script>
我对该组件的所有单元测试都工作正常,除了当我尝试确认 EditableText 组件在 VTextField 子组件触发输入事件时发出输入事件时。
(大多数测试都省略了长度)
import Vue from 'vue'
import { shallowMount } from '@vue/test-utils'
import vuetify from 'vuetify'
import EditableText from '@/components/EditableText'
Vue.use(vuetify) // temporary until vuetify/createLocalVue bug is resolved
const build = options => {
return shallowMount(EditableText, options)
}
// Default props
let options
beforeEach(() => {
options = {
propsData: {
value: 'Test value'
}
}
})
describe('EditableText', () => {
it('emits an input event when the text input is changed', () => {
const { VTextField } = Vue.options.components
const wrapper = build(options)
wrapper.find('.editableText__text').trigger('click') // need to click text to get VTextField to render
wrapper.find(VTextField).trigger('input')
expect(wrapper.emitted('input').length).toBe(1) // wrapper.emitted('input') is undefined
})
})
不幸的是,即使组件在浏览器中测试时工作正常,包装器也永远不会发出输入。
这是我应该测试的东西吗?如果是,我应该如何测试 EditableText 组件是否正确地发出输入事件?我试过直接调用 handleInput 方法,但找不到这样做的方法。
我还想编写一个测试来测试它如何处理空字符串的输入。有没有办法测试具有特定值的输入事件?
解决方案
推荐阅读
- reactjs - 在 react typescript tsx 文件中声明数组会给出“错误 TS1109:预期表达式”
- r - 如何将图形限制为仅显示正 x 轴上方的点?
- typescript - 可以用@mojotech/json-type-validation 表示固定长度的数组/“元组”吗?
- firebase-realtime-database - 如何在 Dart 中使用 await 而不是 .then()
- random - 我可以有效地从 HashSet 中随机抽样吗?
- laravel - 如何在 laravel v5.7 中使用 laravel 集体包 v5.4
- python - 代码执行时出现 Py4JJavaError 的 Apache Spark 问题
- redux-form - Redux 表单未针对新材料 UI 更新,即“@material-ui/core”:“^3.3.2”
- aws-vpc - 每个根账户的 AWS VPC 限制总数
- react-native - 无法让抽屉菜单在 react-native / react-navigation 中工作