Props 与 Computed 是开发元件最常使用的属性,下面的范例是一个运用 Props 与 Computed 的简单例子。
import { ref, computed } from 'vue'
const Component = {
template: `
<div>
<input data-test="password" v-model="password">
<p v-if="showError && isError" data-test="errorMsg">Password must be at least {{minLength}} characters.</p>
</div>
`,
props: {
minLength: {
type: Number,
required: true
},
showError: {
type: Boolean,
default: true
}
},
setup (props) {
const password = ref('')
const isError = computed(() => password.value.length < props.minLength)
return {
isError,
password
}
}
}
元件中有一个输入框可以输入密码,而密码会有一个最短的长度限制 (minLength),预设的情况下,如果短於长度限制会出现错误讯息,不过如果将 showError 设为 false 时,则不会出现错误讯息。
要测试这个元件是否正常,我们应该验证三种情况是否正确运行:
由於这三个 case 使用到的观念与语法有非常多都是前面的文章介绍过的,所以今天我就不一个 case 一个 case 分开讲解,直接附上完整的程序码,也顺带介绍一个实用的语法 beforeEach()。
如果没有看过前面几篇的朋友,建议可以先去看 Conditional rendering & Elements visibility 与 Form Elements Handling,会帮助你更了解以下的程序码。
describe('Props & Computed', () => {
let wrapper
const minLength = 6
beforeEach(() => {
wrapper = mount(Component, {
props: {
minLength
}
})
})
// Case 1: 密码在大於或等於最短长度限制时,不会出现错误讯息。
test(`not renders an error if length is more than or equal to ${minLength}`, async () => {
await wrapper.get('[data-test="password"]').setValue('123456')
expect(wrapper.find('[data-test="errorMsg"]').exists()).toBe(false)
})
// Case 2: 密码少於最短长度限制时,出现错误讯息。
test(`renders an error if length is less than ${minLength}`, async () => {
await wrapper.get('[data-test="password"]').setValue('12345')
expect(wrapper.html()).toContain(`Password must be at least ${minLength} characters`)
})
// Case 3: 当 showError 为 false 时,不显示错误讯息。
test('not renders an error if showError is false ', async () => {
await wrapper.get('[data-test="password"]').setValue('12345')
expect(wrapper.html()).toContain(`Password must be at least ${minLength} characters`)
await wrapper.setProps({ showError: false })
expect(wrapper.find('[data-test="errorMsg"]').exists()).toBe(false)
})
})
语法说明:
今天的分享就到这边,如果大家对我分享的内容有兴趣欢迎点击追踪 & 订阅系列文章,如果对内容有任何疑问,或是文章内容有错误,都非常欢迎留言讨论或指教的!
明天要来分享的是 Vue3 单元测试 (Unit Testing) 主题的第七篇 Testing Vuex ,那我们明天见!
>>: [Day22]程序菜鸟自学C++资料结构演算法 – 气泡排序法(Bubble Sort)
前几篇章节经常提到使用 git add 加至暂存区,git commit 提交到储存库。这些工作区、...
InnoDB将索引分成Cluster Index & Secondary Index,认识...
一切准备就绪 前置任务已经破玩了 今天要开始写我的第一个APP 大多数程序语言第一个写的程序几乎都是...
今天来介绍虚拟网路的部分,既然我们都有各种的虚拟机器、虚拟服务,那想当然,这些服务就是透过虚拟网路进...
画出一张属於自己的学习地图,只有知道自己身在何处,才不会迷路。你必须知道这项学习的终点,该拥有什麽样...